我是否可以并行执行具有异步调用的 Linq OrderBy

本文关键字:调用 异步 Linq OrderBy 是否 并行执行 | 更新日期: 2023-09-27 18:34:57

我有一个 linq 查询的顺序,像这样:

var sortedList = unsortedList
                    .OrderBy(foo => foo.GetCurrentValue())

但是,该方法 GetCurrentValue 响应缓慢(因为它涉及网络通信并且具有相当大的延迟(。据我观察,上面的代码按顺序调用该方法(调用必须在调用下一个调用之前完成,因此如果列表很长,排序将非常慢。

有没有办法告诉linq并行执行?即异步计算表达式,然后在每个人都完成后比较结果?

如果没有,知道如何干净轻松地实现我们自己的实现吗?

我是否可以并行执行具有异步调用的 Linq OrderBy

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);