¿Cómo puedo limitar Parallel.ForEach?

Resuelto eugeneK asked hace 12 años • 5 respuestas

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.

eugeneK avatar Feb 15 '12 16:02 eugeneK
Aceptado

Puede especificar a MaxDegreeOfParallelismen un ParallelOptionsparámetro:

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

MSDN: Paralelo.ParaCada

MSDN: ParallelOptions.MaxDegreeOfParallelism

Nick Butler avatar Feb 15 '2012 09:02 Nick Butler

Puede usar ParallelOptions y configurar MaxDegreeOfParallelism para limitar la cantidad de subprocesos simultáneos:

Parallel.ForEach(
    listOfwebpages, 
    new ParallelOptions{MaxDegreeOfParallelism=2}, 
    webpage => {Download(webpage);});     
rikitikitik avatar Feb 15 '2012 09:02 rikitikitik

Utilice otra sobrecarga Parallel.Foreachque tome una ParallelOptionsinstancia y configúrela MaxDegreeOfParallelismpara limitar la cantidad de instancias que se ejecutan en paralelo.

Richard avatar Feb 15 '2012 09:02 Richard