2013-05-04 64 views
0

我有一个web scraper,处理大约2,000页,我尝试使用Parallel.ForEach循环加速。我当前的代码(修剪简洁)是:使用Parallel.ForEach循环的HtmlAgilityPack中的'System.Net.WebException'

Parallel.ForEach(dataTable1.AsEnumerable(), row => 
{ 
    scrape(); 
} 
); 

public void scrape() 
{ 
    HtmlWeb htmlWeb = new HtmlWeb(); 
    HtmlAgilityPack.HtmlDocument doc = htmlWeb.Load("http://www.website.com"); 
    doScraping(doc); 
} 

当这种使用普通foreach循环,它的工作。现在,它将处理行的一些号码,然后我开始得到以下异常尝试检索时HTMLDocument

型“System.Net.WebException”的第一次机会异常出现在System.dll中

类型“System.Net.WebException”的第一次机会异常出现在HtmlAgilityPack.dll

的操作超时

是什么原因导致的超时在并行循环操作时会发生什么?它将通过第一个150-300行,然后每个后续行超时。

+1

听起来像你想要报废的网站会阻止你,因为你并行做了大量的请求,这看起来像DOS攻击。 – shriek 2013-05-04 17:32:12

+0

@shriek:我不认为该网站阻止了我。我可以从浏览器访问它,同时我不断收到超时错误。另外,如果我重新启动应用程序,它会暂时再次运行。 – 2013-05-05 03:28:36

+0

添加新的ParallelOptions {MaxDegreeOfParallelism = 4}似乎将我的问题减少到非常偶然的超时。我正在4核心处理器上运行应用程序。我仍然很好奇为什么并行不能更好地处理这个问题。 – 2013-05-05 04:12:42

回答

相关问题