Обменять коллекцию задач на коллекцию значений

#c# #asynchronous #task

#c# #асинхронный #задача

Вопрос:

Ищу способ получить значения из коллекции задач. Для exmaple у меня есть

  List<Task<string>> strings
  

и я ищу способ обменять ее на

 List<string> results
  

Единственный приемлемый способ, который я нашел, — это запустить цикл foreach и использовать «await» или «result» для каждого элемента задачи, но мне интересно, есть ли какой-нибудь способ сделать это более простым, например, Task.WaitAll() но со сбором результатов?

Ответ №1:

Вы можете использовать WhenAll

Создает задачу, которая завершится, когда завершатся все объекты задачи в перечислимой коллекции.

 List<Task<string>> tasks = ...

var results = await Task.WhenAll(tasks);
  

Или, если по какой-то причине вы застряли в 2008-х годах, вы можете использовать Task.WaitAll и спроецировать результаты в список

Ожидает завершения выполнения всех предоставленных объектов задачи.

Комментарии:

1. 2008 позвонил и сказал, что он не видел Task.WaitAll или что-то в этом роде. Платформа .NET Framework 4.0 была выпущена в апреле 2010 года. 😃