У мене є список завдань, які я створив таким чином:
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> ?