为 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));
我想调用同一个方法(任务)未知次数,只是参数不同。我遇到了 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));