PLINQ AsParallel()优先级较低?

Chr*_*ris 6 .net c# plinq

是否可以运行我的一些PLINQ AsParallel() - 优先级低于其他查询的查询?(或者一些优先级高于其他人)这可能与PLinq有关,还是我必须避免使用PLINQ并自行完成所有工作?

编辑/ UPDATE:

是否可以打电话

Thread.Sleep(0)
Run Code Online (Sandbox Code Playgroud)

当我想存档较低的优先级时,在并行执行的方法内?或者这是一个非常糟糕的做法/黑客?

Ree*_*sey 5

不幸的是,这在 PLINQ 中不能直接实现。

您可以通过创建自定义TaskScheduler在 Task Parallel Library 的其余大部分内容中执行此操作。这将允许您在使用Parallel.For或时拥有自定义的“优先级” ForEach

但是,PLINQ 没有提供自定义 TaskScheduler 的能力,因为 PLINQ 需要 TaskScheduler 非常严格的保证,担心暴露这一点会很成问题。


编辑/更新:

可以打电话吗

线程.睡眠(0)

这会“降低”优先级,但不幸的是,它有自己的问题,尤其是与 PLINQ 结合使用时。这可能会导致 ThreadPool 中的线程饥饿,因为您将在 ThreadPool 线程上“休眠”。

此外,还有一个基本问题——PLINQ 是为处理查询而设计的,而不是为处理而设计的。引入逻辑代码来控制流结构确实违背了 PLINQ 背后的理论,并且可能会导致您意想不到的性能影响,尤其是在您使用默认分区的情况下。