45

非同期タスク (Async/Await) は .Net 4.5 でどのように機能しますか?

サンプルコード:

private async Task<bool> TestFunction()
{
  var x = await DoesSomethingExists();
  var y = await DoesSomethingElseExists();
  return y;
}

2 番目のawaitステートメントはすぐに実行されますか、それとも最初のステートメントがawait戻った後に実行されますか?

4

3 に答える 3

51

await操作が完了するまでメソッドを一時停止します。したがって、2 番目awaitは最初のリターン後に実行されawaitます。

詳細については、 my async/ awaitintroまたは公式の FAQを参照してください。

于 2012-10-26T11:53:55.683 に答える
15

最初の await が戻った後に実行されます。これで混乱する場合は、ブレークポイントをいじってみてください。ブレークポイントは新しい非同期パターンで完全にサポートされています。

次のようになると想像してください。

var x = await GetSomeObjectInstance();
var y = await GetSomeObjectInstance2(x);

どこかで NullReferenceException が発生する可能性があるため、最初の awaitが最初に返される必要があります。それ以外の場合は、xnull/未定義などになります。

于 2012-10-26T07:02:48.050 に答える