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