awaitに到達したら、呼び出し元に戻る。UIスレッドでawaitを用いると、UIスレッドを停止されることなく簡潔にコードを記述することができる。
Task.Wait()やTask.Resultは呼び出しに戻らないただの待ち。
private void DoMethod() { MethodAsync(); Something(); //Something実行中は裏でMethodAが実行中かもしれない。 } private async Task MethodAsync() { var result = await CallAsync(); //CallAsyncを実行させるが、呼び出し元に戻る。 Console.Writeline("The End"); //CallAsync()が完了していることは保証されている。 }
上記のようにSomething実行中はMethodAsyncが未完了の可能性があるので、Something内でMethodAsyncが完了していることに依存した処理はできない。もし、依存した処理を行っているのであればawaitやWaitで待たなければいけない。