LINQ doesn’t work perfectly with async
code, but you can do this:
var tasks = foos.Select(DoSomethingAsync).ToList();
await Task.WhenAll(tasks);
If your tasks all return the same type of value, then you can even do this:
var results = await Task.WhenAll(tasks);
which is quite nice. WhenAll
returns an array, so I believe your method can return the results directly:
return await Task.WhenAll(tasks);