你需要的是Task.WhenAll。你应该创建与你想要获取数据的不同位置相对应的任务,然后将它们传递给这个方法。
Promise.allSettled
而不是Promise.all
- 因为静态类型,如果您有具有不同类型T
的Task<T>
实例,像Promise.all
这样的东西会导致类型转换,这很笨拙和不安全;最好使用类似Promise.allSettled
的东西,并再次等待已经并行运行和解决的任务的结果。一切都很好。 :-) - mindplay.dk进一步说明 @Christos 的回答:
Task.WhenAll 似乎是最接近 Promise.all 的即插即用替代方案。我发现它比我最初想象的更为接近。以下是一个使用 JavaScript Promise.all
实现的示例,您可能希望在 C# 中复制它:
const [ resolvedPromiseOne, resolvedPromiseTwo ] = await Promise.all([ taskOne, taskTwo ]);
在 C# 中,如果它们返回相同的类型,您可以使用 Task.WhenAll
来执行非常类似的操作。
var taskList = new[]
{
SomeTask(),
AnotherTask()
};
var completedTasks = await Task.WhenAll(taskList);
// then access them like you would any array
var someTask = completedTasks[0];
var anotherTask = completedTasks[1];
// or just iterate over the array
foreach (var task in completedTasks)
{
doSomething(task);
}