Создайте задачу TPL для каждого расчета и запустите их, внутренне каждая задача будет поставлена в очередь и будет выполняться, когда потоки станут доступными, поэтому вам не нужно беспокоиться о управлении потоками, она будет обрабатываться внутренне.
Если вы хотите ограничить максимальную параллельную задачу для выполнения одновременно, вы можете использовать метод Parallel.Invoke и установить MaxDegreeOfParallelism , например.
Parallel.Invoke(
new ParallelOptions() { MaxDegreeOfParallelism = 3 },
() => Calculation1(),
() => Calculation2(),
() => Calculation3(),
);
Parallel.Invoke принимает массив параметров и выполнять действия на нем, чтобы запустить их все параллельно, в то же время вы можете установить MaxDegreeOfParallelism установить максимальное количество вычислений запускаемых одновременно.
например.
Я полагаю, что у вас есть один и тот же метод (Рассчитать), но несколько параметров (Параметры) в качестве входных данных.
Parallel.ForEach(Parameters,new ParallelOptions() { MaxDegreeOfParallelism = 3 }, parameter=> Calculate(parameter));
Вы можете разместить образец кода? –