簡単な質問..
非同期プログラミングと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
を返すだけで十分です。
2つのアプローチの違いはほとんどありません。基本的に、それらは同じセマンティクスを共有します。ただし、async/awaitを使用したバージョンは、コンパイラーが生成した外部タスクで内部タスクの実行をラップします。非非同期バージョンはサポートしていません。したがって、非非同期バージョンは(非常にわずかに)より効率的です。