1. ホーム
  2. c#

[解決済み] 「非同期タスク→awaitタスク」 vs 「タスク→returnタスク」 [重複]。

2023-05-23 03:32:27

質問

簡単な質問ですが...

非同期プログラミングと 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 を返すだけで十分です。