非同期メソッドを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
要するにラムダ内でアレコレしないならどっちでもほぼ変わらん。