¿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, por lo que solo puedo descargar x páginas por vez, pero Parallel.ForEach ejecuta la lista completa de páginas web deseadas.
¿Hay alguna manera 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 a MaxDegreeOfParallelism
en un ParallelOptions
parámetro:
Parallel.ForEach(
listOfWebpages,
new ParallelOptions { MaxDegreeOfParallelism = 4 },
webpage => { Download(webpage); }
);
MSDN: Paralelo.ParaCada
MSDN: ParallelOptions.MaxDegreeOfParallelism
Puede usar ParallelOptions y configurar MaxDegreeOfParallelism para limitar la cantidad de subprocesos simultáneos:
Parallel.ForEach(
listOfwebpages,
new ParallelOptions{MaxDegreeOfParallelism=2},
webpage => {Download(webpage);});
Utilice otra sobrecarga Parallel.Foreach
que tome una ParallelOptions
instancia y configúrela MaxDegreeOfParallelism
para limitar la cantidad de instancias que se ejecutan en paralelo.