AsParallel()如何拆分它的'源'?

Pau*_*hra 5 c# multithreading plinq

我试图确定AsParallel()如何分割它的'source',实际上'source'是什么意思......

例如...

public class CSVItem
{
    public DateTime Date { get; set; }
    public string AccountNumber { get; set; }
}

List<CSVItem> CSVItemList = new List<CSVItem>();
Run Code Online (Sandbox Code Playgroud)

然后将500k不同的CSVItem放入CSVItemList.

然后使用:

CSVItemList = CSVItemList.AsParallel().OrderBy(x => x.AccountNumber).ThenBy(q => q.Date).ToList();
Run Code Online (Sandbox Code Playgroud)

它是否只将'源'(意味着例如250k记录到两个线程中的每一个上)拆分到多个异步线程上并执行OrderBy().然后在每个线程上的ThenBy()合并结果...

或者它将OrderBy()和ThenBy()分离到不同的线程并运行它们然后合并结果...给出一个奇怪的有序列表?

Pra*_*ana 4

它一一完成了 a) 的OrderBy合并结果,然后一一完成了 b) ThenBy。下图来自Albahari 博客,展示了它的工作原理,即它需要一一进行

在此输入图像描述

问:任务数量是多少

答:您可以通过使用WithDegreeOfParallelism强制 PLINQ 同时运行指定数量的任务来决定这一点

   //create 5 task
   List.AsParallel().WithDegreeOfParallelism(5)
Run Code Online (Sandbox Code Playgroud)

检查这个:并行编程

  • @PaulZahra - 当涉及到并行 linq 时,我使用它作为参考 http://www.albahari.com/threading/part5.aspx (2认同)