并行调用方法和合并结果
本文关键字:合并 结果 方法 调用 并行 | 更新日期: 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);