0

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

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

結果の IL コードは、コンパイルされたステート マシンを開始した AsyncTaskMethodBuilder のタスクを返します。私の質問は、このタスクが実際に何を表しているかです。スレッドなどではなく、ステートマシンの実行を表すタスクだと思います。また、ステート マシンが終了したとき、または Exception が発生したときに Faulted 状態に設定されたときに、タスクが完了すると仮定します。明確にしていただければ幸いです。

4

1 に答える 1

2

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

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

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

于 2012-08-13T16:10:09.387 に答える