就并行性而言,这些等效吗?
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方法的使用者可以安全地假定返回的任务是活动的
因此,您的代码通过调用其方法来启动异步操作。他们返回的任务已经在进行中。在两个示例中,两个任务都同时运行。
使用2await
或1并没有多大关系await Task.WhenAll
。我更喜欢这种Task.WhenAll
方法,因为IMO更清楚地传达了并发的意图。另外,它仅中断一次而不是两次中断源上下文(例如,UI线程),但这只是一个小问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句