异步メソッドは、次の戻り値の型を持つことができます:
- Task:値を返さない非同期メソッドの実行に使用されます。
- Task:値を返す非同期メソッドに使用されます。
void
:イベントハンドラに使用されます。GetAwaiter
メソッドにアクセス可能な型。GetAwaiter
メソッドが返すオブジェクトは、System.Runtime.CompilerServices.ICriticalNotifyCompletion インターフェースを実装する必要があります。- IAsyncEnumerable:非同期ストリームを返す非同期メソッドに使用されます。
非同期メソッドの詳細については、非同期プログラミングの async と awaitを参照してください。
また、Windows ワークロードに固有のいくつかのタイプも存在します:
- DispatcherOperation:Windows 専用の非同期操作に使用されます。
- IAsyncAction:値を返さない UWP の非同期操作に使用されます。
- IAsyncActionWithProgress:進捗を報告するが値を返さない UWP の非同期操作に使用されます。
- IAsyncOperation:値を返す UWP の非同期操作に使用されます。
- IAsyncOperationWithProgress<TResult,TProgress>:進捗を報告し値を返す UWP の非同期操作に使用されます。
Task の戻り値の型(Task return type)#
非同期メソッドに return
ステートメントが含まれない場合、または return
ステートメントにオペランドがない場合、通常は Task の戻り値の型が使用されます。同期的に実行される場合は void
が返されます。非同期メソッド内で Task の戻り値の型を使用すると、呼び出し元のメソッドは await
演算子を使用して呼び出し元の完了を一時停止させ、呼び出された非同期メソッドが完了するまで待機できます。
以下の例では、WaitAndApologizeAsync
メソッドには return
ステートメントが含まれていないため、このメソッドは Task
オブジェクトを返します。Task
型を返すことで、WaitAndApologizeAsync
を待機できるようになります。Task 型には Result
プロパティが含まれていないため、戻り値はありません。
public static async Task DisplayCurrentInfoAsync()
{
await WaitAndApologizeAsync();
Console.WriteLine($"Today is {DateTime.Now:D}");
Console.WriteLine($"The current time is {DateTime.Now.TimeOfDay:t}");
Console.WriteLine("The current temperature is 76 degrees.");
}
static async Task WaitAndApologizeAsync()
{
await Task.Delay(2000);
Console.WriteLine("Sorry for the delay...\n");
}
// 出力例:
// Sorry for the delay...
//
// Today is Monday, August 17, 2020
// The current time is 12:59:24.2183304
// The current temperature is 76 degrees.
WaitAndApologizeAsync
メソッドでは、await 式ではなく await ステートメントを使用して待機しています。これは、同期的な戻り値のないメソッドの呼び出し文と似ています。この場合、await 演算子を使用しても値は生成されません。await
の右オペランドが Task の場合、await
式は T
の結果を生成します。
以下のコードでは、WaitAndApologizeAsync
メソッドの呼び出しと、そのメソッドが返す Task を待機する部分を分けています。
Task waitAndApologizeTask = WaitAndApologizeAsync();
string output =
$"Today is {DateTime.Now:D}\n" +
$"The current time is {DateTime.Now.TimeOfDay:t}\n" +
"The current temperature is 76 degrees.\n";
await waitAndApologizeTask;
Console.WriteLine(output);
Task の戻り値の型(Task return type)#
Task の戻り値の型は、TResult
をオペランドとする return ステートメントを含む非同期メソッドに使用されます。
以下の例では、GetLeisureHoursAsync メソッドには整数を返す return ステートメントが含まれています。メソッドの宣言では、戻り値の型を Task に指定する必要があります。FromResult 非同期メソッドは、DayOfWeek の操作のプレースホルダーを返します。