J'ai une boucle asynchrone Parallel.ForEach () avec laquelle je télécharge des pages Web. Ma bande passante étant limitée, je ne peux télécharger que x pages à la fois, mais Parallel.ForEach exécute la liste complète des pages Web souhaitées.
Est-il possible de limiter le nombre de threads ou tout autre limiteur lors de l'exécution de Parallel.ForEach?
Code de démonstration:
Parallel.ForEach(listOfWebpages, webpage => {
Download(webpage);
});
La vraie tâche n’a rien à voir avec les pages Web. Par conséquent, les solutions d’exploration Web créatives n’aideront pas.
Vous pouvez spécifier un MaxDegreeOfParallelism
dans un paramètre ParallelOptions
:
Parallel.ForEach(
listOfWebpages,
new ParallelOptions { MaxDegreeOfParallelism = 4 },
webpage => { Download(webpage); }
);
MSDN: Parallel.ForEach
Vous pouvez utiliser ParallelOptions et définir MaxDegreeOfParallelism pour limiter le nombre de threads simultanés:
Parallel.ForEach(listOfwebpages, new ParallelOptions{MaxDegreeOfParallelism=2}, webpage => {Download(webpage);});
Utilisez une autre surcharge de Parallel.Foreach
prenant une instance ParallelOptions
et définissez MaxDegreeOfParallelism
pour limiter le nombre d'instances exécutées en parallèle.
Et pour les utilisateurs de VB.net (la syntaxe est étrange et difficile à trouver) ...
Parallel.ForEach(listOfWebpages, New ParallelOptions() With {.MaxDegreeOfParallelism = 8}, Sub(webpage)
......end sub)