- У меня есть метод, который использует соединение (например, метод, который загружает страницу).
- Я должен выполнить этот метод несколько раз (например, загрузить 1000 страниц).
- Синхронный и последовательный процесс занимает много времени.
- У меня ограниченные ресурсы (максимум 8 потоков и / или 50 одновременных подключений)
- Я хочу использовать все ресурсы для его ускорения.
- Я знаю, что распараллеливание (PLINQ, Parallel Extensions и т. Д.) Может решить проблему, но я уже пробовал это, и этот подход не работает из-за ограниченных ресурсов.
- Я не хочу изобретать колесо, которое распараллеливает задачи такого рода при управлении ресурсами, кто-то должен был сделать это раньше и должен предоставить библиотеку / учебник для этого.
Может кто-нибудь помочь?
Обновление Все становится намного сложнее, когда вы начинаете смешивать асинхронные вызовы с распараллеливанием для максимальной производительности. Это реализовано на нескольких загрузчиках, таких как загрузчик Firefox, он получает 2 загрузки одновременно, а когда одна из них завершена, он получает следующий файл и так далее. Может быть, это кажется очень простым для реализации, но когда я реализовал его, у меня были и остаются проблемы с тем, чтобы сделать его универсальным (полезным для WebRequest и DbCommand) и иметь дело с проблемами (например, тайм-ауты)
Bounty Hunters Награда будет предоставлена первой, которая связывает надежную и бесплатную ($$) библиотеку .NET, которая предоставляет простой способ C # для распараллеливания асинхронных задач как HttpWebRequests.BegingetResponse и SqlCommand. BeginExecuteNonQuery. Распараллеливание не должно ждать завершения N задач, чтобы затем запустить следующую N, но оно должно начать новую задачу, как только одна из N начальных завершится. Метод должен был обеспечить обработку тайм-аута.