在.NET 4中,是否有任何功能等同于.NET 4.5的System.Threading.Tasks.Task.WhenAll()?
目标是将多个异步任务包装成一个在完成所有组成任务时完成的异步任务。
答案 0 :(得分:27)
在.NET Framework 4.0中,对于Visual Studio 2010,WhenAll和WhenAny可以与已安装的AsyncCTP一起使用,对于Visual Studio 2012,可以与Async Targeting Pack一起使用。
然后在TaskEx类型上提供WhenAll和WhenAny方法。
答案 1 :(得分:16)
我认为.Net 4.0中最接近的内容是ContinueWhenAll()
。您可以将continuationAction
变为简单tasks => tasks
并使用返回的Task
。
出于性能原因,您可能希望将其与TaskContinuationOptions.ExecuteSynchronously
一起使用。
答案 2 :(得分:2)
尝试在另一个任务中等待Task.WaitAll()
。使用LINQ扩展方法ToArray
将IEnumerable<Task>
转换为Task[]
。
Task WhenAll(IEnumerable<Task> tasks)
{
return Task.Factory.StartNew(() => Task.WaitAll(tasks.ToArray()));
}