Как я могу ограничить параллель.По каждому элементу?
У меня есть параллельный.Foreach () асинхронный цикл, с которым я загружаю некоторые веб-страницы. Моя пропускная способность ограничена, поэтому я могу загружать только x страниц за раз, но параллельно.ForEach выполняет весь список нужных веб-страниц.
есть ли способ ограничить число потоков или любой другой ограничитель при параллельной работе.По каждому элементу?
демо-код:
Parallel.ForEach(listOfWebpages, webpage => {
Download(webpage);
});
реальная задача не имеет ничего общего с веб-страницами, поэтому творческие решения для обхода веб-страниц не помогут.
4 ответа:
вы можете использовать ParallelOptions и установить MaxDegreeOfParallelism, чтобы ограничить количество параллельных потоков:
Parallel.ForEach(listOfwebpages, new ParallelOptions{MaxDegreeOfParallelism=2}, webpage => {Download(webpage);});
используйте другую перегрузку
Parallel.Foreach
Что происходитParallelOptions
экземпляр, и setMaxDegreeOfParallelism
чтобы ограничить количество экземпляров, выполняемых параллельно.