redwarrior’s diary

C#, ASP.NET, WEB, G*などの雑多な情報

awaitは、中断と再開

前回からだいぶ時間が空いてしまいました。本年もよろしくお願いいたします。

C# 5.0以降で可能になったasyncとawaitとTaskについての自分用のメモ。ASP.NET MVCやWeb APIでは必要になってくる知識。

ググった結果を斜め読みしてまとめたメモなので、awaitの前後で別スレッドで動作するか検証したとかではないです。

参考サイトのURLをメモしてないので、上記についてまとめられたサイトがあれば教えてくれるとうれしいです。

  • awaitは、中断と再開。

  • awaitが処理された時点で、以降(の行)の処理が中断されて呼び出し元へ移動する。

  • Waitする箇所(WaitXXメソッドを呼ぶ等)を作らなければ、中断は呼び出し元へと波及していく。

  • awaitは、async修飾子のついたメソッドで使用可能。

  • asyncは、中でawaitを使用していないメソッドにもつけることが可能だが、非同期では無いメソッドではつける意味があ まりない。

  • ayncなメソッドの返却値は、Taskもしくはvoidでなければならない。voidは非推奨っぽいのでTaskを使用する。

  • asyncなメソッドは、メソッド呼び出すとTaskを返し、実行を開始する。

  • awaitは、asyncなメソッドの戻り値であるTaskクラスを処理する。

  • awaitを使用する代わりに、TaskクラスのWaitXXメソッドを呼ぶことが出来る。

  • Taskが戻って来た時点でayncなメソッド処理は行われているため、asyncなメソッドの呼び出しとawaitの使用を分けることで、「メソッドの実行」と「結果の取得」を分けることが出来る。