gpt4 book ai didi

c# - 在迭代器 block 和异步 block 中使用元组

转载 作者:行者123 更新时间:2023-11-30 17:09:23 25 4
gpt4 key购买 nike

两者都是iteratorsasync methods创建一个状态机以保持 yield/await 操作之间的状态,并且方法中的每个 local 都成为该状态机类型实例中的一个 field

this talk , Stephen Toub 谈到在 async 方法 的主体中减少局部变量是一个有效的(非微观)优化,如果你有很多等待调用。 (即如果你在循环中等待)

所以在这种情况下,我想知道拥有 7 个本地人和拥有一个本地人(Tuple<T1, T2, T3, T4, T5, T6, T7>)之间的性能差异.

显然,如果迭代器中只有一个 yield 或异步方法中只有一个 await 但当涉及到数千个或此外,您认为使用元组(或任何其他可以包装您的字段的类型)有什么好处吗?

或者这只是另一种微观优化尝试,没有任何效果或效果太差而无法使用?

编辑:现在我又想到了,我想如果它有任何好处的话,它已经那样实现了。尽管如此,我仍然对此感到好奇。

最佳答案

如果您有数千个 await/yield,那么就已经很不对劲了。还应该注意的是,两者有不同的实现。但是,更改为元组并没有添加任何有用的东西,IMO。在这两种情况下,您仍在存储(作为状态)单个引用,无论该引用是否:

  • 迭代器实例
  • 捕获变量上下文
  • 一个元组
  • 一个捕获变量上下文一个元组

但是通过使用元组,您可以保证在任何需要改变变量的时候都需要一个新实例。

Tulle 可以在手动实现异步时更有趣(比如 ContinueWith),但我真的认为使用编译器提供实现时不值得。

关于c# - 在迭代器 block 和异步 block 中使用元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12986380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com