У меня не было возможности фактически использовать PLINQ, однако я знаю, что PLINQ (например, vanilla LINQ) основан на IEnumerable. Таким образом, я думаю, что это может быть тот случай, когда имеет смысл реализовать производителя задач с помощью блоков итераторов C # (т.е. ключевое слово yield).
Предполагая, что вы не выполняете никаких операций, для которых весь набор задач должен быть известен заранее (например, упорядочивание), я ожидаю, что PLINQ будет использовать только столько задач, сколько может обработать за один раз. Кроме того, эта статья ссылается на некоторые стратегии управления тем, как PLINQ использует потребление входных данных (раздел, озаглавленный «Обработка вывода запроса»).
РЕДАКТИРОВАТЬ : Сравнение PLINQ с ThreadPool.
Согласно этой статье MSDN , эффективное распределение работы для пула потоков вовсе не тривиально, и даже если вы делаете это "правильно", использование TPL обычно демонстрирует лучшую производительность.