Mam listę zadań, które utworzyłem w ten sposób:
public async Task<IList<Foo>> GetFoosAndDoSomethingAsync()
{
var foos = await GetFoosAsync();
var tasks = foos.Select(async foo => await DoSomethingAsync(foo)).ToList();
...
}
Po użyciu .ToList()
wszystkie zadania powinny się rozpocząć. Teraz chcę poczekać na ich zakończenie i zwrócić wyniki.
Działa to w powyższym ...
bloku:
var list = new List<Foo>();
foreach (var task in tasks)
list.Add(await task);
return list;
Robi, co chcę, ale wydaje się to raczej niezdarne. Wolałbym napisać coś prostszego:
return tasks.Select(async task => await task).ToList();
... ale to się nie kompiluje. czego mi brakuje? A może po prostu nie można tego wyrazić w ten sposób?
DoSomethingAsync(foo)
kolejno dla każdego foo, czy jest to kandydat do Parallel.ForEach <Foo> ?