Как правильно сделать многопоточность при множестве запросов к серверу?

Есть, например, задача - нужно обратиться к серверу по ссылке 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 запросов.
  • Вопрос задан
  • 2550 просмотров
Пригласить эксперта
Ответы на вопрос 1
icelaba
@icelaba
Знаю и умею всё
Установить Линукс и используя curl и gnu parallel вообще не писать код :-) наилучший выход. А вообще просто наберите в msdn c# threadpool и куча готовых примеров ждет вас.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы