J'ai une liste de tâches que j'ai créées comme ceci:
public async Task<IList<Foo>> GetFoosAndDoSomethingAsync()
{
var foos = await GetFoosAsync();
var tasks = foos.Select(async foo => await DoSomethingAsync(foo)).ToList();
...
}
En utilisant .ToList()
, les tâches devraient toutes commencer. Maintenant, je veux attendre leur achèvement et renvoyer les résultats.
Cela fonctionne dans le ...
bloc ci-dessus :
var list = new List<Foo>();
foreach (var task in tasks)
list.Add(await task);
return list;
Il fait ce que je veux, mais cela semble plutôt maladroit. Je préfère de loin écrire quelque chose de plus simple comme celui-ci:
return tasks.Select(async task => await task).ToList();
... mais cela ne compile pas. Qu'est-ce que je rate? Ou n'est-il tout simplement pas possible d'exprimer les choses de cette façon?
DoSomethingAsync(foo)
série pour chaque toto, ou s'agit-il d'un candidat pour Parallel.ForEach <Foo> ?