为 Task.WhenAll() 创建数组

Creating Array for Task.WhenAll()

我想调用同一个方法(任务)未知次数,只是参数不同。我遇到了 Task.WhenAll () 并且据我了解,我需要将一系列任务传递给它。假设我有一个带有参数的数组,我需要对其进行异步 运行 。我想了一下,想写这样的代码:

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

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

但是这段代码好像只会调用第5行的task,只把结果写入list。我有一个问题,我还能怎样给小组打电话 来自具有不同参数的相同方法?

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

await Task.WhenAll(list);

请注意 ToArray 是多余的,因为 Task.WhenAll 有一个 overload 接受 IEnumerable<Task>.

这个列表也是不必要的,你可以简单地投影你的 Data:

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