チャンネル9msdnビデオを閲覧すると、次の未回答のコメントが見つかり、誰かがそれを説明できることを期待していましたか?
asyncキーワードのポイントがわかりません。イテレータがIEnumerableを返すメソッドでreturnを生成できるように、メソッドがTaskを返すときはいつでもawaitキーワードを許可しないのはなぜですか。
確かに正当な理由があると思いますが、上記の提案ができなかった理由を理解したいと思います。
チャンネル9msdnビデオを閲覧すると、次の未回答のコメントが見つかり、誰かがそれを説明できることを期待していましたか?
asyncキーワードのポイントがわかりません。イテレータがIEnumerableを返すメソッドでreturnを生成できるように、メソッドがTaskを返すときはいつでもawaitキーワードを許可しないのはなぜですか。
確かに正当な理由があると思いますが、上記の提案ができなかった理由を理解したいと思います。
これは主に下位互換性の問題を回避するために導入されました。メソッドのasync
-nessをコンパイラーが推測する必要がある場合(await
キーワードの検出を通じて)、特に識別子(変数名または関数名と呼ばれるawait
)がある場合に、既存のコードが突然異なる方法で処理される微妙なシナリオがあります。 。
完全な説明はここにあります:https ://docs.microsoft.com/en-us/archive/blogs/ericlippert/asynchrony-in-c-5-part-six-whither-async
私はおそらくこの記事が推論をカバーしていると思います:
https://docs.microsoft.com/en-us/archive/blogs/ericlippert/asynchrony-in-c-5-part-six-whither-async
最初の段落は次のように述べています。
多くの人から、「await」式を含むメソッドの前にコンテキストキーワード「async」を付ける必要があるという設計上の決定の動機が何であるかを尋ねられました。
結論:
それは多くの長所と短所です。それらすべてを評価し、プロトタイプコンパイラを何度も試してどのように感じたかを確認した後、C#設計者は、「await」を含むメソッドに「async」を要求することにしました。それは合理的な選択だと思います。
その欠点は、下位互換性です。
参考文献:
私にとって最も説得力のある理由はreturn
、関数が。になるとステートメントの意味が変わることasync
です。なしasnyc
return x
は「値を使用してタスクを返す」をx
意味し、非同期を使用すると「タスクの結果をに設定する」を意味しますx
。
少し前に、 async/awaitキーワードの質問の要約をブログに書きました。
async
「推論」セクションの結論は次のとおりです。
Eric Lippertは、このテーマに関する決定的な投稿をしています。ブログのコメント、Channel9、フォーラムでも議論されています。
要約すると、1語の
await
キーワードは大きな変化にはなりません。選択は、マルチワード待機(eg、await for
)またはメソッド内のキーワード(など)のいずれかで、そのメソッド内でキーワードasync
を有効にしawait
ます。メソッドを明示的にマークすることは、人間とコンピューターの両方にとって解析が容易であるため、ペアasync
を使用することにしました。async/await