与Promise.all等效的C#是什么?

时间:2019-02-02 18:00:32

标签: c# firebase promise task-parallel-library

我想从多个位置获取数据 如Frank Van Puffelen所述的herehere所描述的Firebase实时数据库,我在c#中找不到与Promise.all等效的内容。正确的做法是什么?

2 个答案:

答案 0 :(得分:5)

您要寻找的是Task.WhenAll。您应该创建与要从中获取数据的多个位置一样多的任务,然后以这种方法提供它们。

答案 1 :(得分:0)

详细介绍@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);
}

假设它们都在async方法/函数中。