c# - 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>
解决方案
你只需要制作你的 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
推荐阅读
- spring - Spring Statemachine - 隐式状态转换
- javascript - 角度排序数组作为另一个数组
- sql - SQL:选择一个预定义的列列表
- internet-explorer - SVG 徽标阴影属性在 IE 中不起作用
- angular - Protractor - E2E 测试仅在我将鼠标移到每个 Cucumber 场景的浏览器窗口上时开始
- sql - BEFORE 和 AFTER dml 操作有什么区别?(行级安全性)
- php - 如果文件夹为空,则创建文件
- javascript - 与 Iframe Angular 交互后的 Chrome 后退按钮问题
- http - 如何强制浏览器 http 请求中包含“主机”标头
- amazon-web-services - AWS S3 与 Elemental MediaStore