我还在学习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”。
如果我用明确的等待替换第二个...... await
static async Task<int> FooAsync() {
var t1 = Method1Async();
var t2 = Method2Async();
var result1 = await t1;
var result2 = t2.Result;
return result1 + result2;
}
...我似乎得到了同样的行为。
这两个例子完全等价吗?
如果在这种情况下它们是等价的,是否还有其他情况可以用await
显式等待替换最后一个会产生影响?