WhenAll 用于包含任务的匿名类型

WhenAll for anonymous type containing a Task

是否可以等待包含 Task 的匿名对象(或 Tuple,无关紧要)...最好用代码解释...

假设我们有这个:

async Task<Item> GetItem(int i);

基本案例(有效):

var itemTasks = new []{1,2,3}.Select(i => GetItem(i)).toArray();
Item[] items = await Task.WhenAll(itemTasks);

我想做什么

var itemTasks = new []{1,2,3}
    .Select(i => new { MyItem = GetItem(i), TheNumber = i })
    .toArray();
//some way to wait for all and get a collection of<anynomous type above> 

你只需要让你的 lambda async:

var itemTasks = new []{ 1, 2, 3 }
    .Select(async i => new { MyItem = await GetItem(i), TheNumber = i });

var anonymousObjects = await Task.WhenAll(itemTasks);

async lambda 将隐式地 return 一个 Task<AnonymousObject>


顺便说一句,您的 ToArray() 是多余的,因为 Task.WhenAll 无论如何都会枚举 Task