Есть, например, задача - нужно обратиться к серверу по ссылке
example.com/?i=X 5000 раз, где X - какая-то строка. Есть список этих ссылок. И есть максимальное количество потоков (например 50).
Пока все реализовано и работает таким образом
void managerThread()
{
while (true)
{
for (int i = threads.Count - 1; i >= 0; i--) //убирать выполненные потоки
if (!threads[i].IsAlive)
threads.RemoveAt(i);
if (threads.Count == 0)
lock (strings) //список строк
if (strings.Count == 0)
return;
Thread.Sleep(50);
if (threads.Count < threadsMax)
{
Thread thread = new Thread(someMethodDo); //запуск метода на обработку строки
thread.IsBackground = true;
thread.Priority = ThreadPriority.Lowest;
threads.Add(thread);
thread.Start();
}
}
}
И уже в самом методе из списка удаляется строка, обрабатывается. Решение работает, но хотелось бы не создавать очередной велосипед, а реальный пример ThreadPool или TaskScheduler, для подобной задачи, с заданным количеством потоков для обработки X запросов.