首页 > 解决方案 > WhenAll 用于包含任务的匿名类型

问题描述

是否可以等待包含任务的匿名对象(或元组,不在乎)......最好用代码解释......

让我们说我们有这个:

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> 

标签: c#async-awaitanonymous-class

解决方案


你只需要制作你的 lambda async

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

var anonymousObjects = await Task.WhenAll(itemTasks);

lambda将async隐式返回 a Task<AnonymousObject>


顺便说一句, yourToArray()是多余的,因为无论如何都要Task.WhenAll枚举s 。Task


推荐阅读