16

在 .NET 4 中,是否有与 .NET 4.5 的System.Threading.Tasks.Task.WhenAll()等效的功能?

目标是将多个异步任务打包成一个,当其所有组成任务完成时完成。

4

3 回答 3

27

在 .NET Framework 4.0中,在 Visual Studio 2010 的情况下,WhenAll 和 WhenAny 可以与已安装的AsyncCTP一起使用,在 Visual Studio 2012 的情况下,可以与Async Targeting Pack一起使用。

然后在 TaskEx 类型上提供 WhenAll 和 WhenAny 方法。

于 2012-08-19T12:28:31.440 回答
17

我认为 .Net 4.0 中内置的最接近的东西是ContinueWhenAll(). 您可以使continuationActiona 简单tasks => tasks并使用返回的Task.

出于性能原因,您可能希望将其与TaskContinuationOptions.ExecuteSynchronously.

于 2012-07-16T21:41:53.767 回答
2

Task.WaitAll()尝试在另一个任务中等待。使用 LINQ 扩展方法ToArrayIEnumerable<Task>.Task[]

Task WhenAll(IEnumerable<Task> tasks)
{
    return Task.Factory.StartNew(() => Task.WaitAll(tasks.ToArray()));
}
于 2012-07-16T21:18:49.853 回答