PLINQ AsParallel()优先级较低?

时间:2011-03-04 18:07:31

标签: c# .net plinq

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

EDIT / UPDATE:

是否可以致电

Thread.Sleep(0)
当我想存档较低优先级时,在并行执行的方法中

? 或者这是一个非常糟糕的做法/黑客?

2 个答案:

答案 0 :(得分:4)

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

您可以通过创建自定义TaskScheduler在任务并行库的大部分内容中执行此操作。这样,您就可以在使用Parallel.ForForEach时获得自定义“优先级”。

然而,PLINQ没有提供自定义TaskScheduler的能力,因为PLINQ需要来自TaskScheduler的非常严格的保证,并且担心暴露这将是非常有问题的。


  

EDIT / UPDATE:

     

是否可以致电

     

的Thread.Sleep(0)

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

此外,还存在一个基本问题 - PLINQ旨在用于处理查询,而不是为处理而设计的。引入逻辑代码来控制流程结构实际上违背了PLINQ背后的理论,并且可能会导致您不期望的意外性能影响,尤其是在您使用默认分区时。

答案 1 :(得分:2)

AsParallel是非常高级的API。如果您希望使用Priority

对所发生的事情进行细粒度控制,那么您应该使用Thread s