非同期メソッドをTask.Runするときasync/awaitを付けるか否か比較 | 主にDIYのブログ

主にDIYのブログ

ブログの説明を入力しません。

非同期メソッドをTask.Run()で別スレッドで実行するとき、async/awaitを付けて呼び出すべきか否か迷ったので比較。

 

async Task<string> f()
{
    Console.WriteLine("f1");
    await Task.Delay(1000);
    Console.WriteLine("f2");
    return "完了";
}

void button3_Click(object sender, EventArgs e)
{
    Console.WriteLine("btn3start");
    using (var t = Task.Run(f))
    {
        Console.WriteLine("btn3running");
        Console.WriteLine(t.Result);
        Console.WriteLine("btn3end");
    }
}

 

これのfの部分をラムダ式で呼ぶ場合下記どちらがいいか。

() => f()

async () => await f()

 

 

() => { var ret = f(); Console.WriteLine("この順番が変わる"); return ret; }

同期相当の↑これだと↓こうなる。varはTask<string>。

btn3start
btn3running
f1
この順番が変わる
f2
完了
btn3end

 

 

async () => { var ret = await f(); Console.WriteLine("この順番が変わる"); return ret; }

非同期相当の↑これだと↓こうなる。varはstring。

btn3start
btn3running
f1
f2
この順番が変わる
完了
btn3end

 


要するにラムダ内でアレコレしないならどっちでもほぼ変わらん。