Ho un elenco di attività che ho creato in questo modo:
public async Task<IList<Foo>> GetFoosAndDoSomethingAsync()
{
var foos = await GetFoosAsync();
var tasks = foos.Select(async foo => await DoSomethingAsync(foo)).ToList();
...
}
Utilizzando .ToList()
, le attività dovrebbero iniziare tutte. Ora voglio attendere il loro completamento e restituire i risultati.
Funziona nel ...
blocco sopra :
var list = new List<Foo>();
foreach (var task in tasks)
list.Add(await task);
return list;
Fa quello che voglio, ma sembra piuttosto goffo. Preferisco di gran lunga scrivere qualcosa di più semplice come questo:
return tasks.Select(async task => await task).ToList();
... ma questo non viene compilato. Cosa mi sto perdendo? O semplicemente non è possibile esprimere le cose in questo modo?
DoSomethingAsync(foo)
serie per ogni foo, o questo è un candidato per Parallel.ForEach <Foo> ?