并行调用方法和合并结果

本文关键字:合并 结果 方法 调用 并行 | 更新日期: 2023-09-27 17:49:27

我有一个MainMethod需要并行调用两个方法Method1和Method2。它们都将返回Employee列表,但来自不同的数据库。我需要并行调用它们,然后在MainMethod中合并Method1和Method2的结果,然后将结果返回给MainMethod的调用者。

如果有人能告诉我方法的签名必须是什么,我需要写什么代码,我的意思是async/await关键字。

并行调用方法和合并结果

使用更多的简写…

public static async Task<IEnumerable<Employee>> MainMethod()
{
    // Await when all to get an array of result sets after all of then have finished
    var results = await Task.WhenAll(
        Task.Run(() => Method1()), // Note that this leaves room for parameters to Method1...
        Task.Run(Method2)          // While this shorthands if there are no parameters
        // Any further method calls can go here as more Task.Run calls
        );
    // Simply select many over the result sets to get each result
    return results.SelectMany(r => r);
}

作为签名引用,它使用了以下。net函数:

  • 任务。WhenAll
  • 任务。运行
  • 可点数的。SelectMany(作为扩展方法)

您可以将它们作为2个Task<T>运行。Result属性负责等待。约:

// untested 
Task<List<Employee>> t1 = Task.Factory.StartNew(() => Method1());
Task<List<Employee>> t2 = Task.Factory.StartNew(() => Method2());
var result = t1.Result.Concat(t2.Result);