是否可以运行我的一些 PLINQ AsParallel() - 优先级低于其他查询的查询?(或者某些优先级高于其他人)PLinq 是否可以做到这一点,还是我必须避免使用 PLINQ 并自己完成所有工作?
编辑/更新:
可以打电话吗
Thread.Sleep(0)
当我想归档较低优先级时,在并行执行的方法中?或者这是一个非常糟糕的做法/黑客?
不幸的是,这在 PLINQ 中无法直接实现。
您可以通过创建自定义TaskScheduler在任务并行库的大部分其余部分中执行此操作。Parallel.For
这将允许您在使用or时拥有自定义“优先级” ForEach
。
但是,PLINQ 没有提供自定义 TaskScheduler 的能力,因为 PLINQ 要求 TaskScheduler 提供非常严格的保证,并且担心暴露这一点会很成问题。
编辑/更新:
可以打电话吗
线程.睡眠(0)
这会“降低”优先级,但不幸的是,它有自己的问题,尤其是与 PLINQ 结合使用时。这可能会导致 ThreadPool 中的线程饥饿,因为您将在 ThreadPool 线程上“休眠”。
此外,这还有一个根本问题——PLINQ 是为处理查询而设计的,而不是为处理而设计的。引入逻辑代码来控制流结构确实违反了 PLINQ 背后的理论,并且可能会导致您意想不到的性能影响,尤其是在您使用默认分区时。
AsParallel
是非常高级的 API。如果您想使用PriorityThread
对正在发生的事情进行细粒度控制,您应该真正使用s