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 una lista completa de las páginas web deseadas.
¿Hay alguna manera de limitar el número de hilos o cualquier otro limitador mientras se ejecuta Parallel.ForEach?
Código de demostración:
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.
c#
.net
asynchronous
parallel.foreach
eugeneK
fuente
fuente

Respuestas:
Puede especificar a
MaxDegreeOfParallelismen unParallelOptionsparámetro:MSDN: Parallel.ForEach
MSDN: ParallelOptions.MaxDegreeOfParallelism
fuente
var opts = new ParallelOptions { MaxDegreeOfParallelism = Convert.ToInt32(Math.Ceiling((Environment.ProcessorCount * 0.75) * 1.0)) };-1es lo mismo que no especificarlo: "Si [el valor] es -1, no hay límite en el número de operaciones que se ejecutan simultáneamente".var opts = new ParallelOptions { MaxDegreeOfParallelism = Convert.ToInt32(Math.Ceiling((Environment.ProcessorCount * 0.75) * 2.0)) };. Enlace a hilos vs núcleos - askubuntu.com/questions/668538/…Puede usar ParallelOptions y establecer MaxDegreeOfParallelism para limitar el número de hilos concurrentes:
fuente
Use otra sobrecarga de
Parallel.Foreacheso toma unaParallelOptionsinstancia y configúreloMaxDegreeOfParallelismpara limitar cuántas instancias se ejecutan en paralelo.fuente
Y para los usuarios de VB.net (la sintaxis es extraña y difícil de encontrar) ...
fuente