私はまだasync
/を学んawait
でいるので、何か明白なことを求めているのなら失礼します。次の例を考えてみましょう。
class Program {
static void Main(string[] args) {
var result = FooAsync().Result;
Console.WriteLine(result);
}
static async Task<int> FooAsync() {
var t1 = Method1Async();
var t2 = Method2Async();
var result1 = await t1;
var result2 = await t2;
return result1 + result2;
}
static Task<int> Method1Async() {
return Task.Run(
() => {
Thread.Sleep(1000);
return 11;
}
);
}
static Task<int> Method2Async() {
return Task.Run(
() => {
Thread.Sleep(1000);
return 22;
}
);
}
}
これは期待どおりに動作し、コンソールに「33」を出力します。
2番目 await
を明示的な待機に置き換えると...
static async Task<int> FooAsync() {
var t1 = Method1Async();
var t2 = Method2Async();
var result1 = await t1;
var result2 = t2.Result;
return result1 + result2;
}
...私は同じ振る舞いをするようです。
これらの2つの例は完全に同等ですか?
そして、この場合、それらが同等である場合、最後await
を明示的な待機に置き換えると違いが生じる他のケースはありますか?