Tengo una lista de tareas que creé así:
public async Task<IList<Foo>> GetFoosAndDoSomethingAsync()
{
var foos = await GetFoosAsync();
var tasks = foos.Select(async foo => await DoSomethingAsync(foo)).ToList();
...
}
Al usar .ToList()
, todas las tareas deberían comenzar. Ahora quiero esperar su finalización y devolver los resultados.
Esto funciona en el ...
bloque anterior :
var list = new List<Foo>();
foreach (var task in tasks)
list.Add(await task);
return list;
Hace lo que quiero, pero esto parece bastante torpe. Prefiero escribir algo más simple como esto:
return tasks.Select(async task => await task).ToList();
... pero esto no se compila. ¿Qué me estoy perdiendo? ¿O simplemente no es posible expresar las cosas de esta manera?
DoSomethingAsync(foo)
serie para cada foo, o es un candidato para Parallel.ForEach <Foo> ?