¿Cómo puedo limitar Parallel.ForEach?

Tengo un bucle asíncrono Parallel.ForEach () con el que descargo algunas páginas web. Mi ancho de banda es limitado, así que puedo descargar solo x páginas por vez, pero Parallel.ForEach ejecuta toda la lista de páginas web deseadas.

¿Hay alguna forma de limitar el número de subprocesos o cualquier otro limitador mientras se ejecuta Parallel.ForEach?

Código de demostración:

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

La verdadera tarea no tiene nada que ver con las páginas web, por lo que las soluciones creativas de rastreo web no ayudarán.

Puede especificar un MaxDegreeOfParallelism en un parámetro ParallelOptions :

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

MSDN: Parallel.ForEach

MSDN: ParallelOptions.MaxDegreeOfParallelism

Puede usar ParallelOptions y establecer MaxDegreeOfParallelism para limitar el número de subprocesos concurrentes:

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

Use otra sobrecarga de Parallel.Foreach que tome una instancia de ParallelOptions y configure MaxDegreeOfParallelism para limitar cuántas instancias se ejecutan en paralelo.

Y para los usuarios de VB.net (la syntax es extraña y difícil de encontrar) …

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