Saya memiliki daftar tugas yang saya buat seperti ini:
public async Task<IList<Foo>> GetFoosAndDoSomethingAsync()
{
var foos = await GetFoosAsync();
var tasks = foos.Select(async foo => await DoSomethingAsync(foo)).ToList();
...
}
Dengan menggunakan .ToList()
, semua tugas harus dimulai. Sekarang saya ingin menunggu penyelesaian mereka dan mengembalikan hasilnya.
Ini berfungsi di ...
blok di atas :
var list = new List<Foo>();
foreach (var task in tasks)
list.Add(await task);
return list;
Itu melakukan apa yang saya inginkan, tetapi ini tampaknya agak kikuk. Saya lebih suka menulis sesuatu yang lebih sederhana seperti ini:
return tasks.Select(async task => await task).ToList();
... tapi ini tidak bisa dikompilasi. Apa yang saya lewatkan? Atau apakah tidak mungkin untuk mengungkapkan hal-hal seperti ini?
DoSomethingAsync(foo)
secara serial untuk setiap foo, atau apakah ini kandidat untuk Parallel.ForEach <Foo> ?