我是否可以并行执行具有异步调用的 Linq OrderBy
本文关键字:调用 异步 Linq OrderBy 是否 并行执行 | 更新日期: 2023-09-27 18:34:57
我有一个 linq 查询的顺序,像这样:
var sortedList = unsortedList
.OrderBy(foo => foo.GetCurrentValue())
但是,该方法 GetCurrentValue 响应缓慢(因为它涉及网络通信并且具有相当大的延迟(。据我观察,上面的代码按顺序调用该方法(调用必须在调用下一个调用之前完成,因此如果列表很长,排序将非常慢。
有没有办法告诉linq并行执行?即异步计算表达式,然后在每个人都完成后比较结果?
如果没有,知道如何干净轻松地实现我们自己的实现吗?
MSDN 有一篇专门关于 PLINQ - http://msdn.microsoft.com/en-us/library/dd460677.aspx 中"订单保存"的文章(根据我之前的评论(。链接给出的示例:
var cityQuery = (from city in cities.AsParallel()
where city.Population > 10000
select city);
只是把它作为一个可能的实现扔在那里,像这样的东西?其中slowList
是"慢速"对象的可枚举集合。Parallel.ForEach
可以用任何其他异步"暂存"操作代替,以收集慢速值。
var stage1List = new List<dynamic>();
var parOpt = new System.Threading.Tasks.ParallelOptions() { MaxDegreeOfParallelism = 30 };
System.Threading.Tasks.Parallel.ForEach(slowList, parOpt, slowObj =>
{
stage1List.Add(new { Obj = slowObj, Value = slowObj.GetSlowValue() });
});
var stage2List = stage1List.OrderBy(p => p.Value).Select(p => p.Obj);