Как я могу ограничить Parallel.ForEach?

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

Есть ли способ ограничить число нитей или любой другой лимитер во время работы Parallel.ForEach?

Демо-код:

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

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

    Вы можете указать MaxDegreeOfParallelism в параметре ParallelOptions :

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

    MSDN: Parallel.ForEach

    MSDN: ParallelOptions.MaxDegreeOfParallelism

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

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

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

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

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

    Фон с 2 цветами в JavaFX?

    Файлы, скрытые на жестком диске USB из-за вируса, как очистить?

    Как безопасно удалять файлы, хранящиеся на SSD?

    Как показать схему таблицы в базе данных MySQL?

    Рекурсивный вызов ConcurrentHashMap.computeIfAbsent () никогда не завершается. Ошибка или «функция»?

    Как перемещать окна, открывающиеся за кадром?

    Windows 10 Universal App File / Directory Access

    Что означает эта ошибка WCF: «Предупреждение о настраиваемом инструменте: невозможно импортировать wsdl: portType»

    Является ли .NET CLR JIT компилировать каждый метод каждый раз?

    Как вы получаете UserID объекта User в ASP.Net MVC?

    Можно ли отключить кэширование записи на запоминающем устройстве USB на Mac OS X?

    Selenium с использованием Java. Путь к исполняемому файлу драйвера должен быть задан с помощью свойства webdriver.gecko.driver

    Менеджер загрузки Classic на Firefox> 20

    Стандартное связывание модели ASP.NET MVC 3 не связывает десятичные свойства

    accepts_nested_attributes_ для неудачной проверки дочерней ассоциации

    Давайте будем гением компьютера.