イテレータと非同期メソッドの両方が、yield/await 操作の間で状態を維持するためのステート マシンを作成し、メソッド内のすべてのローカルがステート マシン タイプのそのインスタンスのフィールドになります。
このトークでは、Stephen Toub が、async メソッドの本体でローカル変数を少なくすることが、await 呼び出しが多い場合に有効な (マイクロではない) 最適化であると語っています。(つまり、ループで待機している場合)
したがって、この場合、7 つのローカルを持つ場合とTuple<T1, T2, T3, T4, T5, T6, T7>
.
明らかに、イテレータにyieldが1つしかない場合、またはasyncメソッドにawaitが1つしかない場合、物事を複雑にするだけですが、数千以上になると、タプル(またはフィールドをラップする他のタイプ)を使用すると思いますか? )何か良いことはありますか?
それとも、何も達成しないか、使用するには少なすぎるマイクロ最適化の試みでしょうか?
編集:もう一度考えてみると、それがうまくいくなら、それはすでにそのように実装されていると思います。とはいえ、まだまだ気になるところです。