并行获取来自不同来源的项目并返回结果
本文关键字:项目 返回 结果 获取 并行 | 更新日期: 2023-09-27 18:25:05
我有一些代码看起来与此类似:
public IList<Result> GetResult()
{
var result = new List<Result>();
result.AddRange(GetSomeItemsA());
result.AddRange(GetSomeItemsB());
result.AddRange(GetSomeItemsC());
return result;
}
我想使用任务并行库调用方法GetSomeItemsA、GetSomeItemsB和GetSomeItemsC,或者通过其他方式使其更快,然后仅在三个任务完成时返回结果。
一般来说,什么是最好的方法,当我们需要从不同的来源获取项目,然后返回包含来自该来源的所有项目的结果时,如何进行优化?
您可以使用PLINQ执行以下操作:
public IList<Result> GetResult()
{
return new Func<IEnumerable<Result>>[] { GetSomeItemsA, GetSomeItemsB, GetSomeItemsC }
.AsParallel()
.SelectMany(f => f())
.ToList();
}
我做了如下操作:
var result = new List<Result>();
var firstTask = new Task<IEnumerable<Result>>(this.GetSomeItemsA);
var secondTask = new Task<IEnumerable<Result>>(this.GetSomeItemsB);
var thirdTask = new Task<IEnumerable<Result>>(this.GetSomeItemsC);
firstTask.Start();
secondTask.Start();
thirdTask.Start();
Task.WaitAll(firstTask, secondTask, thirdTask);
result.AddRange(firstTask.Result);
result.AddRange(secondTask.Result);
result.AddRange(thirdTask.Result);
return result;