c# - AsParallel() 如何拆分它的 'source' ?

标签 c# multithreading plinq

我正在尝试确定 AsParallel() 如何拆分它的“源”,以及“源”的确切含义...

例如……

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

List<CSVItem> CSVItemList = new List<CSVItem>();

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

然后使用:

CSVItemList = CSVItemList.AsParallel().OrderBy(x => x.AccountNumber).ThenBy(q => q.Date).ToList();

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

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

最佳答案

一个接一个 a) 完成 OrderBy 合并结果并比 gose for b) 然后通过。下面的图片 Albahari 博客 显示了它是如何工作的,即一张一张地显示

enter image description here

问:有多少任务

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

   //create 5 task
   List.AsParallel().WithDegreeOfParallelism(5)

检查这个:Parallel Programming

关于c# - AsParallel() 如何拆分它的 'source' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31340798/

相关文章:

c# - Xamarin 表单工具栏项未显示在 View 中

android - 进度对话框在 Android 中显示缓慢

java - CPU 使用率高,几乎所有线程都处于阻塞状态

c# - 使用 PLINQ 时如何避免内存不足异常?

c# - PLINQ 有什么真正的好处吗?

c# - PLINQ 和 AsParallel()

c# - 是否可以针对多个身份验证提供程序来保护 ASP.NET Web API 2 应用程序的安全?

c# - 异常堆栈跟踪丢失的项目

c# - 我需要一个最佳算法来找到数字 N 的最大除数。最好是在 C++ 或 C# 中

C# - 静态只读字符串——可能会遇到多线程问题?