В TPL вы можете использовать WithDegreeOfParallelism
на ParallelEnumerable
или ParallelOptions.MaxDegreeOfParallism
Существует также CountdownEvent
, который может быть лучшим вариантом, если вы просто используете пользовательские потоки или задачи.
В ThreadPool
, когда вы используете SetMaxThreads
, это глобально для AppDomain
, поэтомупотенциально вы могли бы излишне ограничивать несвязанный код.
Нельзя установить число рабочих потоков или число потоков завершения ввода-вывода, которое будет меньше числа процессоров в компьютере.
Если общеязыковая среда выполнения размещается, например, в Internet Information Services (IIS) или SQL Server, хост может ограничивать или предотвращать изменения размера пула потоков.
Будьте осторожны при изменении максимальногоколичество потоков в пуле потоков.Хотя ваш код может принести пользу, изменения могут отрицательно повлиять на используемые вами библиотеки кода.
Слишком большой размер пула потоков может вызвать проблемы с производительностью.Если одновременно выполняется слишком много потоков, издержки на переключение задач становятся существенным фактором.
Я согласен с другим ответом, что вы должны использовать TPL поверх ThreadPool
, поскольку это лучшая абстракциямногопоточности, но можно добиться того, что вы хотите в обоих.