Jak mogę ograniczyć równoległe.ForEach?
Mam paralelę.Foreach () pętla asynchroniczna, za pomocą której pobieram niektóre strony internetowe. Moja przepustowość jest ograniczona, więc mogę pobierać tylko x strony w czasie, ale równolegle.ForEach wykonuje całą listę pożądanych stron internetowych.
Czy istnieje sposób na ograniczenie liczby wątków lub innego ogranicznika podczas pracy równoległej.ForEach?
Kod Demo:
Parallel.ForEach(listOfWebpages, webpage => {
Download(webpage);
});
Prawdziwe zadanie nie ma nic wspólnego ze stronami internetowymi, więc kreatywne rozwiązania web crawling nie pomogą.
4 answers
Możesz określić MaxDegreeOfParallelism
w parametrze ParallelOptions
:
Parallel.ForEach(
listOfWebpages,
new ParallelOptions { MaxDegreeOfParallelism = 4 },
webpage => { Download(webpage); }
);
MSDN: Parallel.ForEach
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-15 09:11:19
Możesz użyć ParallelOptions i ustawić MaxDegreeOfParallelism, aby ograniczyć liczbę równoległych wątków:
Parallel.ForEach(listOfwebpages, new ParallelOptions{MaxDegreeOfParallelism=2}, webpage => {Download(webpage);});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-01 01:05:44
Użyj innego przeciążenia Parallel.Foreach
, które zajmuje ParallelOptions
instancja i ustaw MaxDegreeOfParallelism
, aby ograniczyć liczbę instancji wykonujących równolegle.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-15 09:12:17
I dla VB.net użytkowników (składnia jest dziwna i trudna do znalezienia)...
Parallel.ForEach(listOfWebpages, New ParallelOptions() With {.MaxDegreeOfParallelism = 8}, Sub(webpage)
......end sub)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-16 18:18:24