Как я могу ограничить параллель.По каждому элементу?


У меня есть параллельный.Foreach () асинхронный цикл, с которым я загружаю некоторые веб-страницы. Моя пропускная способность ограничена, поэтому я могу загружать только x страниц за раз, но параллельно.ForEach выполняет весь список нужных веб-страниц.

есть ли способ ограничить число потоков или любой другой ограничитель при параллельной работе.По каждому элементу?

демо-код:

Parallel.ForEach(listOfWebpages, webpage => {
  Download(webpage);
});

реальная задача не имеет ничего общего с веб-страницами, поэтому творческие решения для обхода веб-страниц не помогут.

4 242

4 ответа:

вы можете указать MaxDegreeOfParallelism на

вы можете использовать ParallelOptions и установить MaxDegreeOfParallelism, чтобы ограничить количество параллельных потоков:

Parallel.ForEach(listOfwebpages, new ParallelOptions{MaxDegreeOfParallelism=2}, webpage => {Download(webpage);});     

используйте другую перегрузку Parallel.Foreach Что происходит ParallelOptions экземпляр, и set MaxDegreeOfParallelism чтобы ограничить количество экземпляров, выполняемых параллельно.

и для VB.net пользователи (синтаксис странный и трудно найти)...

Parallel.ForEach(listOfWebpages, New ParallelOptions() With {.MaxDegreeOfParallelism = 8}, Sub(webpage)
......end sub)