19

まだ非同期について学んでいます-待ってください。私は次のような例にぶつかりました:

public async Task MethodAsync()
{
  await Method01Async();
  await Method02Async();
}

最後の待機の目的は何ですか?Method02Asyncは、MethodAsyncメソッドの最後の行です。したがって、メソッドの余りはなく、以下の行もありません。コンパイラによって生成されたコールバックで呼び出されるものはありません...何かが足りませんか?

4

1 に答える 1

21

実際には「メソッドの剰余」があります-それTaskはによって返されたものを完了しMethodAsyncます。

(の戻り値)は、完了するまで完了しないMethod02Asyncように待機しています。MethodAsyncMethod02Async

あなたが持っていた場合:

public async Task MethodAsync()
{
  await Method01Async();
  Method02Async();
}

次に、MethodAsyncは(非同期で)Method01Async完了するのを待ってから開始しMethod02Asyncます。その後、まだ進行MethodAsync中の可能性がありますが完了します。Method02Async

あなたがそれを持っている方法:

public async Task MethodAsync()
{
  await Method01Async();
  await Method02Async();
}

(非同期で)完了するのを待ってから(非同期で)完了するのを待ってから、完了するMethodAsyncことを意味します。Method01AsyncMethod02AsyncMethodAsync

于 2012-04-20T14:09:09.147 に答える