Библиотека времени выполнения "сделает все правильно" (в основном).Он определяет, сколько ядер у вас есть, и, соответственно, пытается сбалансировать рабочую нагрузку.
Ваш проект не все , что, кстати, сильно отличается.Хотя кажется, что большинство примеров параллельного программирования, которые мы видим, имеют отношение к выполнению одной задачи и ее разбиению, чтобы можно было работать с несколькими ядрами, существует множество приложений, которые делают то, о чем вы говорите,Например, у меня есть несколько приложений, которые запускают несколько потоков конвейерным способом.Один поток обслуживает входную очередь (чтение из файла, распаковка данных и размещение записей в очереди), один поток обслуживает выходную очередь (принимает записи из вывода, сжимает их и записывает на диск) и «основной поток»"который читает из входной очереди, обрабатывает записи и записывает в выходную очередь.Ограничивающим фактором здесь является то, насколько быстро я могу сжимать и записывать на диск.
Несмотря на то, что документация рекомендует использовать BackgroundWorker
обычно для коротких задач, в таком приложении он может хорошо работать, если вы не пользуетесь им.не работает целая куча (т. е. вы исчерпали пул потоков).Если вам нужны некоторые долго работающие потоки, а также нужно много использовать пул потоков, то вам, вероятно, следует подумать о создании собственных потоков без пула (с использованием класса System.Threading.Thread
) для долгосрочных задач.