誰も私にこれがどういう意味を説明できますか?それは私が尋ねた別のポスト(Does await new Task(async() => Actually halt execution until finished?)での答えだったと私は本当にタスク待ちの電話の誤解
...非同期待機をコメントの一部を理解していないよ - 待つ - 完了するためにタスクを待ち。それはなぜ だと呼ばれる "待っている"。
それは、タスクが完了していないならば、呼び出し元に 戻りを待っているため非同期であり、 タスクが完了した時点でのawaitを次の作業を実行するようにスケジュール になるまで、このスレッドで他の作業を行います。
awaitはタスクに関する演算子であることを理解してください。呼び出しの呼び出し規約は ではありません。待ち受けタイプの表現はすべて が待つことができます。信じているのトラップに落ちることはありません 非同期を呼び出します。呼び出されたメソッドはすでに非同期です。 が返されたタスクが待たれているものです。
「タスクが完了するのを待つ」と同時に「呼び出し元に戻り、他の作業を行う」方法はありますか?
ありがとうございます!
フォローアップ:
私は回答を見てきましたので、以下の擬似コード例では何が起こるのでしょうか?どのタスクが実際にどのような順序で起こるか?
await new Task(async() =>
{
//Do stuff 1
Thread.Sleep(10000);
}
EventLog.Write("Do Stuff 2");
await new Task(async() =>
{
//Do stuff 3
Thread.Sleep(10000);
}
"Do It Stuff 1"を実行してから、「Do It Stuff 2」が実行され、「Do Stuff 3」が実行されますか?または、「実行する」を実行し、すぐに「実行する」をクリックし、次に「実行する」を実行しますか?
[新しいタスク(async()=>実際に完了するまで実行を停止しますか?](https://stackoverflow.com/questions/47293580/does-await-new-taskasync-actually-halt-execution)の可能な複製-until-finished) –
"論理的に"待機します。つまり、次の行はタスク完了後にのみ実行されます。 – SLaks
メソッドが部分的に分割されています。 'await'の後の全てのコードは' Continuation'としてスケジュールされているので、すぐに呼び出し元に戻り、 'await'が終了すると' ThreadPool'スレッドか捕捉されたコードの残りの部分が呼び出されます'SynchronizationContext' – JohanP