Ich habe eine Liste von Aufgaben, die ich wie folgt erstellt habe:
public async Task<IList<Foo>> GetFoosAndDoSomethingAsync()
{
var foos = await GetFoosAsync();
var tasks = foos.Select(async foo => await DoSomethingAsync(foo)).ToList();
...
}
Durch die Verwendung .ToList()sollten alle Aufgaben beginnen. Jetzt möchte ich auf ihre Fertigstellung warten und die Ergebnisse zurückgeben.
Dies funktioniert im obigen ...Block:
var list = new List<Foo>();
foreach (var task in tasks)
list.Add(await task);
return list;
Es macht was ich will, aber das scheint ziemlich ungeschickt. Ich würde viel lieber so etwas Einfacheres schreiben:
return tasks.Select(async task => await task).ToList();
... aber das wird nicht kompiliert. Was vermisse ich? Oder ist es einfach nicht möglich, Dinge so auszudrücken?
DoSomethingAsync(foo)für jedes Foo seriell verarbeiten , oder ist dies ein Kandidat für Parallel.ForEach <Foo> ?