c# .net asynchronous parallel.foreach

c# - ¿Cómo puedo limitar Parallel.ForEach?



.net asynchronous (4)

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

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

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

Código demo:

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

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


Puede usar ParallelOptions y configurar MaxDegreeOfParallelism para limitar el número de subprocesos simultáneos:

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 la cantidad de instancias que se ejecutan en paralelo.


Y para los usuarios de VB.net (la sintaxis es rara y difícil de encontrar) ...

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