eug*_*neK 282 .net c# asynchronous parallel.foreach
我有一个Parallel.ForEach()异步循环,我下载了一些网页.我的带宽有限,所以我每次只能下载x页,但Parallel.ForEach会执行所需网页的完整列表.
有没有办法在运行Parallel.ForEach时限制线程号或任何其他限制器?
演示代码:
Parallel.ForEach(listOfWebpages, webpage => {
Download(webpage);
});
Run Code Online (Sandbox Code Playgroud)
真正的任务与网页无关,因此创意网络抓取解决方案无济于事.
Nic*_*ler 534
您可以MaxDegreeOfParallelism
在ParallelOptions
参数中指定a :
Parallel.ForEach(
listOfWebpages,
new ParallelOptions { MaxDegreeOfParallelism = 4 },
webpage => { Download(webpage); }
);
Run Code Online (Sandbox Code Playgroud)
MSDN:Parallel.ForEach
MSDN:ParallelOptions.MaxDegreeOfParallelism
rik*_*tik 41
您可以使用ParallelOptions并设置MaxDegreeOfParallelism来限制并发线程的数量:
Parallel.ForEach(
listOfwebpages,
new ParallelOptions{MaxDegreeOfParallelism=2},
webpage => {Download(webpage);});
Run Code Online (Sandbox Code Playgroud)
use*_*060 11
而对于VB.net用户(语法很奇怪,很难找到)......
Parallel.ForEach(listOfWebpages, New ParallelOptions() With {.MaxDegreeOfParallelism = 8}, Sub(webpage)
......end sub)
Run Code Online (Sandbox Code Playgroud)
小智 5
我认为更动态和现实的方法是通过处理器数量来限制它,这样在每个系统上它都会正常运行:
var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount };
Parallel.ForEach(myList, options, iter => { });
Run Code Online (Sandbox Code Playgroud)
也许你会乘以Environment.ProcessorCount
或除以它来给 CPU 施加或承受更大的压力
归档时间: |
|
查看次数: |
137600 次 |
最近记录: |