Всем привет. Есть задача замучить C# но заставить работать как мне надо.
В общем есть метод который вызывается в многопотоке. Тут он вызывается 9 раз.
В каждом потоке тайминг будет разный то есть время работы будет разная.
static void Main()
{
ThreadPool.SetMaxThreads(3, 3);
for (int i = 0; i < 9; i++)
ThreadPool.QueueUserWorkItem(JobForAThread, new object[] { i });
Console.ReadLine();
}
static void JobForAThread(object state)
{
object[] array = state as object[];
int x = Convert.ToInt32(array[0]);
Console.WriteLine("цикл {0}, выполнение внутри потока из пула {0}", x,
Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(10000);
Console.WriteLine("Закончил работать {0}", x);
}
Выход:

Но это для меня не правильно, нужно иначе. Грубо говоря у меня есть n -итераций и будет вызывается метод JobForAThread. Так как я указал SetMaxThreads(3,3) я рассчитывал, что она сначала с тремя потоками закончить и дальше возьмется работать.
То есть по итогу мне нужно:
цикл 0, выполнение внутри потока из пула {0}
цикл 1, выполнение внутри потока из пула {1}
цикл 2, выполнение внутри потока из пула {2}
....ожидание пока они закончат
"Закончил работать {0}"
цикл 3, выполнение внутри потока из пула {3}
"Закончил работать {1}"
цикл 4, выполнение внутри потока из пула {4}
"Закончил работать {2}"
и т.д.
Что я неправильно делаю? И ThreadPool для этой задачи не подходит?
UPD:
Всё отлично подходит ошибка была в том, что метод SetMaxThreads не может установить меньше потоков чем количество ядер а именно:
Максимальное число рабочих потоков или потоков завершения ввода-вывода в число не может задать меньше, чем количество процессоров на компьютере. Чтобы определить, сколько процессоров присутствуют, получения значения Environment.ProcessorCount свойство. Кроме того невозможно задать максимальное число рабочих потоков или потоков завершения ввода-вывода в число меньше, чем соответствующий минимальное количество рабочих потоков или потоков завершения ввода-вывода. Чтобы определить размер пула потоков, минимальное, вызовите GetMinThreads метод.
Исполья эту инфу всё работает как надо: