Вы можете реализовать планировщик, который ограничивает степень параллелизма.
http://msdn.microsoft.com/en-us/library/ee789351.aspx
Мне неясно, каков ваш сценарий, но этот подход может использоваться для ограничения максимального количества выполняемых задач, но может не гарантировать, что три запускаются все время, просто, что не более трех могут выполняться одновременно.
Другой подход может состоять в том, чтобы запустить три Задачи и попросить их прочитать данные из ConcurrentQueue, содержащие информацию, необходимую для выполнения фактической работы. Это позволит вам всегда выполнять три вещи параллельно.
По сути, то, что вы делаете, несколько расходится с философией, лежащей в основе TPL, которая на самом деле заключается в выражении вашей работы в качестве потенциального параллелизма и наличии расписания выполнения на таком количестве ядер, которое доступно.