是否可以运行我的一些PLINQ AsParallel() - 优先级低于其他查询的查询?(或者一些优先级高于其他人)这可能与PLinq有关,还是我必须避免使用PLINQ并自行完成所有工作?
编辑/ UPDATE:
是否可以打电话
Thread.Sleep(0)
Run Code Online (Sandbox Code Playgroud)
当我想存档较低的优先级时,在并行执行的方法内?或者这是一个非常糟糕的做法/黑客?
不幸的是,这在 PLINQ 中不能直接实现。
您可以通过创建自定义TaskScheduler在 Task Parallel Library 的其余大部分内容中执行此操作。这将允许您在使用Parallel.For或时拥有自定义的“优先级” ForEach。
但是,PLINQ 没有提供自定义 TaskScheduler 的能力,因为 PLINQ 需要 TaskScheduler 非常严格的保证,担心暴露这一点会很成问题。
编辑/更新:
可以打电话吗
线程.睡眠(0)
这会“降低”优先级,但不幸的是,它有自己的问题,尤其是与 PLINQ 结合使用时。这可能会导致 ThreadPool 中的线程饥饿,因为您将在 ThreadPool 线程上“休眠”。
此外,还有一个基本问题——PLINQ 是为处理查询而设计的,而不是为处理而设计的。引入逻辑代码来控制流结构确实违背了 PLINQ 背后的理论,并且可能会导致您意想不到的性能影响,尤其是在您使用默认分区的情况下。
| 归档时间: |
|
| 查看次数: |
1051 次 |
| 最近记录: |