К сожалению, в PLINQ это невозможно сделать напрямую.
Вы можете сделать это в большей части остальной библиотеки параллельных задач, создав пользовательский TaskScheduler . Это позволит вам иметь собственные «приоритеты» при использовании Parallel.For
или ForEach
.
Однако возможность настройки TaskScheduler не была предоставлена с PLINQ, поскольку PLINQ требует очень строгих гарантий от TaskScheduler, и существует опасение, что разоблачение этого будет очень проблематичным.
EDIT / UPDATE:
Можно ли позвонить
Thread.Sleep (0)
Это «понизит» приоритет, но, к сожалению, имеет свои проблемы, особенно в сочетании с PLINQ. Это может вызвать голодание потока в ThreadPool, так как вы будете "спать" в потоках ThreadPool.
Кроме того, существует фундаментальная проблема: PLINQ предназначен для обработки запросов и не предназначен для обработки . Введение логического кода для управления структурой потока действительно противоречит теории, лежащей в основе PLINQ, и, вероятно, приведет к непредвиденным последствиям для производительности, которых вы не ожидаете, особенно если вы используете разбиение по умолчанию.