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
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)