ฉันมีรายการงานที่ฉันสร้างไว้ดังนี้:
public async Task<IList<Foo>> GetFoosAndDoSomethingAsync()
{
var foos = await GetFoosAsync();
var tasks = foos.Select(async foo => await DoSomethingAsync(foo)).ToList();
...
}
โดยการใช้.ToList()
งานควรเริ่มต้นทั้งหมด ตอนนี้ฉันต้องการรอให้เสร็จสิ้นและส่งคืนผลลัพธ์
สิ่งนี้ใช้ได้ใน...
บล็อกด้านบน:
var list = new List<Foo>();
foreach (var task in tasks)
list.Add(await task);
return list;
มันทำในสิ่งที่ฉันต้องการ แต่ดูเหมือนจะค่อนข้างเงอะงะ ฉันอยากจะเขียนอะไรที่ง่ายกว่านี้:
return tasks.Select(async task => await task).ToList();
... แต่นี่ไม่ได้รวบรวม ฉันขาดอะไรไป? หรือเป็นไปไม่ได้ที่จะแสดงออกด้วยวิธีนี้?
DoSomethingAsync(foo)
เป็นลำดับสำหรับแต่ละ foo หรือนี้เป็นผู้สมัครเพื่อParallel.ForEach <Foo> ?