任务等待与Task.WaitAll

时间:2015-11-08 21:21:14

标签: c# asynchronous parallel-processing async-await task

在并行性方面这些是等价的吗?

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()时开始执行。

1 个答案:

答案 0 :(得分:1)

是的,就&#34;并行性而言#34; (实际上并发),它们几乎是一样的。

特别是,返回任务的TAP docs状态是&#34; hot&#34;,即:

  

必须激活从TAP方法返回的所有任务... TAP方法的使用者可以安全地假设返回的任务是活动的

因此,您的代码通过调用其方法启动异步操作。他们返回的任务已在进行中。在这两个示例中,两个任务同时运行。

使用两个await还是一个await Task.WhenAll并不重要。我更喜欢Task.WhenAll方法,因为IMO更清楚地传达了并发的意图。此外,它只会中断源上下文(例如,UI线程)一次而不是两次,但这只是一个小问题。