【问题标题】:Creating Array for Task.WhenAll() [closed]为 Task.WhenAll() 创建数组 [关闭]
【发布时间】:2021-02-25 14:25:37
【问题描述】:

我想调用相同的方法(任务)未知次数,只是使用不同的参数。我遇到了 Task.WhenAll () ,据我所知,我需要将一组任务传递给它。假设我有一个包含需要异步运行的参数的数组。想了想,想写这样的代码:

List<Task> list = new List<Task>();

foreach(var data in Data)
{
    list.Add(MyTask(data));
}
Task.WhenAll(list.ToArray());

但似乎这段代码只会调用第5行的任务,只将结果写入list。我有一个问题,我还能怎么打电话给小组 来自不同参数的相同方法?

【问题讨论】:

    标签: c# async-await task


    【解决方案1】:

    Task.WhenAll 返回一个新的Task,当所有提供Tasks 都完成时完成,所以你需要await 这个:

    await Task.WhenAll(list);
    

    注意ToArray 是多余的,因为Task.WhenAll 有一个overload 接受IEnumerable&lt;Task&gt;

    列表也不需要,你可以简单地投射你的Data

    await Task.WhenAll(Data.Select(MyTask));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-03
      • 2012-07-05
      • 2016-02-25
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      相关资源
      最近更新 更多