У меня есть список задач, которые я создал вот так:
public async Task<IList<Foo>> GetFoosAndDoSomethingAsync()
{
var foos = await GetFoosAsync();
var tasks = foos.Select(async foo => await DoSomethingAsync(foo)).ToList();
...
}
При использовании .ToList()все задачи должны запускаться. Теперь хочу дождаться их завершения и вернуть результаты.
Это работает в приведенном выше ...блоке:
var list = new List<Foo>();
foreach (var task in tasks)
list.Add(await task);
return list;
Он делает то, что я хочу, но это кажется довольно неуклюжим. Лучше я напишу что-нибудь попроще:
return tasks.Select(async task => await task).ToList();
... но это не компилируется. Что мне не хватает? Или это просто невозможно так выразить?
DoSomethingAsync(foo)последовательно обрабатывать каждый foo, или это кандидат на Parallel.ForEach <Foo> ?