44

チャンネル9msdnビデオを閲覧すると、次の未回答のコメントが見つかり、誰かがそれを説明できることを期待していましたか?

asyncキーワードのポイントがわかりません。イテレータがIEnumerableを返すメソッドでreturnを生成できるように、メソッドがTaskを返すときはいつでもawaitキーワードを許可しないのはなぜですか。

確かに正当な理由があると思いますが、上記の提案ができなかった理由を理解したいと思います。

4

4 に答える 4

24

これは主に下位互換性の問題を回避するために導入されました。メソッドのasync-nessをコンパイラーが推測する必要がある場合(awaitキーワードの検出を通じて)、特に識別子(変数名または関数名と呼ばれるawait)がある場合に、既存のコードが突然異なる方法で処理される微妙なシナリオがあります。 。

完全な説明はここにあります:https ://docs.microsoft.com/en-us/archive/blogs/ericlippert/asynchrony-in-c-5-part-six-whither-async

于 2012-02-10T09:58:38.887 に答える
15

私はおそらくこの記事が推論をカバーしていると思います:

https://docs.microsoft.com/en-us/archive/blogs/ericlippert/asynchrony-in-c-5-part-six-whither-async

最初の段落は次のように述べています。

多くの人から、「await」式を含むメソッドの前にコンテキストキーワード「async」を付ける必要があるという設計上の決定の動機が何であるかを尋ねられました。

結論:

それは多くの長所と短所です。それらすべてを評価し、プロトタイプコンパイラを何度も試してどのように感じたかを確認した後、C#設計者は、「await」を含むメソッドに「async」を要求することにしました。それは合理的な選択だと思います。

その欠点は、下位互換性です。

参考文献:

http://blogs.msdn.com/b/ericlippert/archive/2010/10/29/asynchronous-programming-in-c-5-0-part-two-whence-await.aspx

于 2012-02-10T09:58:22.443 に答える
10

私にとって最も説得力のある理由はreturn、関数が。になるとステートメントの意味が変わることasyncです。なしasnyc return xは「値を使用してタスクを返す」をx意味し、非同期を使用すると「タスクの結果をに設定する」を意味しますx

于 2012-02-10T10:05:06.880 に答える
3

少し前に、 async/awaitキーワードの質問の要約をブログに書きました。

async「推論」セクションの結論は次のとおりです。

Eric Lippertは、このテーマに関する決定的な投稿をしています。ブログのコメントChannel9フォーラムでも議論されています。

要約すると、1語のawaitキーワードは大きな変化にはなりません。選択は、マルチワード待機(eg、await for)またはメソッド内のキーワード(など)のいずれかで、そのメソッド内でキーワードasyncを有効にしawaitます。メソッドを明示的にマークすることは、人間とコンピューターの両方にとって解析が容易であるため、ペアasyncを使用することにしました。async/await

于 2012-02-10T13:38:03.420 に答える