任务等待与任务等待
本文关键字:任务 等待 | 更新日期: 2023-09-27 18:21:17
就并行性而言,这些等价吗?
async Task TestMethod1()
{
Task<int> t1 = GetInt1();
Task<int> t2 = GetInt2();
await Task.WhenAll(t1, t2);
}
async Task TestMethod2()
{
Task<int> t1 = GetInt1();
await GetInt2();
await t1;
}
在TestMethod2
中,我主要感兴趣的是了解GetInt1()
是否在等待GetInt2()
时开始执行。
是的,就"并行性"(实际上是并发)而言,它们几乎是一样的。
特别是,TAP文档声明返回的任务是"热"的,即:
必须激活从TAP方法返回的所有任务。。。TAP方法的使用者可以安全地假设返回的任务是活动的
因此,您的代码通过调用异步操作的方法来启动异步操作。他们返回的任务已经在进行中。在这两个示例中,两个任务都同时运行。
使用两个await
还是一个await Task.WhenAll
并不重要。我更喜欢Task.WhenAll
方法,因为IMO更清楚地传达了并发的意图。此外,它只中断源上下文(例如UI线程)一次,而不是两次,但这只是一个小问题。