0

asyncで宣言された非同期メソッドの戻り型がTaskまたはTask< TResult>である場合。それは待つことができます。メソッド内ではC#コードでタスクは返されませんが、Task< TResult> TResultの値例えば:

private static async Task<int> AsyncDemo()
{
    await Task.Delay(1000);
    return 1;
}

結果のILコードは、コンパイルされたステートマシンを起動したAsyncTaskMethodBuilderのタスクを返します。私の質問は、このタスクが実際に何を表しているのかということです。スレッドではなく、ステートマシンの実行を表すタスクだと思います。また、ステートマシンが終了したときにタスクが完了したか、例外が発生したときにFaulted状態に設定されたとします。説明をお願いします。


1 답변


2

タスクは概念的にメソッドを表します。

メソッドが戻ると、タスクは(正常に)完了し、結果はメソッドから返された値に設定されます(該当する場合)。メソッドが例外をスローした場合、タスクは失敗します(エラーで完了します)。特別な場合がありますOperationCanceledException:その場合、タスクは取り消されます(取り消されて完了します)。

技術的には、タスクはステートマシンを表します。これはメソッドの書き換えです。しかし、ステートマシンは隠されているため、タスクは概念的にメソッド自体を表します。


  • Stephenさん、ありがとうございます。 - Jürgen Bayer

関連する質問

最近の質問