2013-05-04 36 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

回答

相關問題