是否可以运行我的一些PLINQ AsParallel() - 优先级低于其他查询的查询? (或者一些优先级高于其他人) 这可能与PLinq有关,还是我必须避免使用PLINQ并自行完成所有这些工作?
EDIT / UPDATE:
是否可以致电
Thread.Sleep(0)
当我想存档较低优先级时,在并行执行的方法中? 或者这是一个非常糟糕的做法/黑客?
答案 0 :(得分:4)
不幸的是,这在PLINQ中无法直接实现。
您可以通过创建自定义TaskScheduler在任务并行库的大部分内容中执行此操作。这样,您就可以在使用Parallel.For
或ForEach
时获得自定义“优先级”。
然而,PLINQ没有提供自定义TaskScheduler的能力,因为PLINQ需要来自TaskScheduler的非常严格的保证,并且担心暴露这将是非常有问题的。
EDIT / UPDATE:
是否可以致电
的Thread.Sleep(0)
这将“降低”优先级,但不幸的是,它有自己的问题,特别是与PLINQ结合使用时。这可能会导致ThreadPool中的线程不足,因为你将在ThreadPool线程上“休眠”。
此外,还存在一个基本问题 - PLINQ旨在用于处理查询,而不是为处理而设计的。引入逻辑代码来控制流程结构实际上违背了PLINQ背后的理论,并且可能会导致您不期望的意外性能影响,尤其是在您使用默认分区时。
答案 1 :(得分:2)
AsParallel
是非常高级的API。如果您希望使用Priority
Thread
s