.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()));
}