Tôi có một danh sách các nhiệm vụ mà tôi đã tạo như sau:
public async Task<IList<Foo>> GetFoosAndDoSomethingAsync()
{
var foos = await GetFoosAsync();
var tasks = foos.Select(async foo => await DoSomethingAsync(foo)).ToList();
...
}
Bằng cách sử dụng .ToList()
, tất cả các tác vụ sẽ bắt đầu. Bây giờ tôi muốn chờ họ hoàn thành và trả về kết quả.
Điều này hoạt động trong ...
khối trên :
var list = new List<Foo>();
foreach (var task in tasks)
list.Add(await task);
return list;
Nó làm những gì tôi muốn, nhưng điều này có vẻ khá vụng về. Tôi muốn viết một cái gì đó đơn giản hơn như thế này:
return tasks.Select(async task => await task).ToList();
... nhưng điều này không biên dịch. Tôi đang thiếu gì? Hay chỉ là không thể diễn đạt mọi thứ theo cách này?
DoSomethingAsync(foo)
tuần tự cho từng foo hay đây là ứng cử viên cho Parallel.ForEach <Foo> ?