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

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

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

демо-код:

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

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

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)