この質問にはすでに答えがあります。
簡単な質問
Asynchronous ProgrammingとC ++に関する理解を深めるためにawait
マルチスレッドと実行の順序と時間に関して、これら2つのコードスニペットの違いは何ですか。
この:
public Task CloseApp()
{
return Task.Run(
()=>{
// save database
// turn off some lights
// shutdown application
});
}
これに対して:
public async Task CloseApp()
{
await Task.Run(
()=>{
// save database
// turn off some lights
// shutdown application
});
}
私はこのルーチンでそれを呼んでいるなら:
private async void closeButtonTask()
{
// Some Task 1
// ..
await CloseApp();
// Some Task 2
// ..
}
それはほとんど同じです(スレッドなどに関して)。しかし2番目のもの(await
より多くのオーバーヘッドがコンパイラによって作成されます。
として宣言されたメソッドasync
と使用await
に変換されますステートマシンコンパイラによって。だからあなたがヒットしたときawait
制御フローは呼び出し元のメソッドに返され、実行されます。async
メソッドの後に再開されますawait
待ったときTask
終わりました。
あなたの後にこれ以上コードがないのでawait
、使用する必要はありませんawait
とにかく。単に返すTask
十分です。
Post
メソッドを呼び出し、呼び出し元にタスクが終了したことを通知します。私が覚えているように、非同期メソッドの残りの部分は次のように実行されます。ContinueWith
。実行は待機ポイントから続行されますが、別のスレッドで実行することができます。 - Joseph Katzman
2つの方法の間にはほとんど違いがありません。基本的に、それらは同じ意味を共有します。ただし、async / await付きのバージョンは、外側のコンパイラ生成タスクで内側のタスクの実行をラップします。非同期バージョンではありません。したがって、非同期でないバージョンは(ごくわずかに)より効率的です。