myesn

myEsn2E9

hi
github

[未完成]C#: 非同期戻り値の型(Async return types)

异步メソッドは、次の戻り値の型を持つことができます:

  • Task値を返さない非同期メソッドの実行に使用されます。
  • Task値を返す非同期メソッドに使用されます。
  • void:イベントハンドラに使用されます。
  • GetAwaiter メソッドにアクセス可能な型。GetAwaiter メソッドが返すオブジェクトは、System.Runtime.CompilerServices.ICriticalNotifyCompletion インターフェースを実装する必要があります。
  • IAsyncEnumerable:非同期ストリームを返す非同期メソッドに使用されます。

非同期メソッドの詳細については、非同期プログラミングの async と awaitを参照してください。

また、Windows ワークロードに固有のいくつかのタイプも存在します:

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 の操作のプレースホルダーを返します。

参考#

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。