Taskメモ

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で待たなければいけない。