.NET 4 эквивалент Task.WhenAll()
В .NET 4 существует ли какой-либо функциональный эквивалент .NET 4.5 System.Threading.Tasks.Task.WhenAll()?
Цель состоит в том, чтобы объединить несколько задач async в один, который будет завершен, когда будут выполнены все его составные задачи.
Ответы
Ответ 1
Я думаю, что самая близкая вещь, встроенная в .Net 4.0, ContinueWhenAll()
. Вы можете сделать continuationAction
простой tasks => tasks
и использовать возвращенный Task
.
По соображениям производительности вы можете использовать его с TaskContinuationOptions.ExecuteSynchronously
.
Ответ 2
В .NET Framework 4.0 WhenAll и WhenAny можно использовать с установленным AsyncCTP в случае Visual Studio 2010 или Async Targeting Pack в случае Visual Studio 2012.
Затем применяются методы WhenAll и WhenAny в типе TaskEx.
Ответ 3
Попробуйте подождать Task.WaitAll()
в другой Задаче. Используйте метод расширения LINQ ToArray
для преобразования из IEnumerable<Task>
в Task[]
.
Task WhenAll(IEnumerable<Task> tasks)
{
return Task.Factory.StartNew(() => Task.WaitAll(tasks.ToArray()));
}