【问题标题】:WhenAll for anonymous type containing a TaskWhenAll 用于包含任务的匿名类型
【发布时间】: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# 是区分大小写的语言。

标签: c# async-await anonymous-class


【解决方案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&lt;AnonymousObject&gt;


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

【讨论】:

  • 甜蜜!谢谢乔纳森!没错。我认为这是一些正在进行的工作。感谢您的帮助!
  • Task.WhenAll 将在返回之前将所有任务复制到内部数组中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多