WhenAll 用于包含任务的匿名类型
Posted
技术标签:
【中文标题】WhenAll 用于包含任务的匿名类型【英文标题】:WhenAll for anonymous type containing a Task 【发布时间】:2021-08-16 10:55:32 【问题描述】:是否可以等待包含 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>
【问题讨论】:
GetItem
是否与getItem
相同? C# 是区分大小写的语言。
【参考方案1】:
你只需要让你的 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 将隐式返回 Task<AnonymousObject>
。
顺便说一句,您的ToArray()
是多余的,因为Task.WhenAll
无论如何都会枚举Task
s。
【讨论】:
甜蜜!谢谢乔纳森!没错。我认为这是一些正在进行的工作。感谢您的帮助!Task.WhenAll
将在返回之前将所有任务复制到内部数组中。以上是关于WhenAll 用于包含任务的匿名类型的主要内容,如果未能解决你的问题,请参考以下文章