2015-12-21 77 views
0

讓我們假設我有20個url的列表中,任何人都可以幫助我在最短的時間內得到所有這20個url的響應[如重定向implimentation verifier]。驗證重定向implimation

XmlNodeList lst = doc.SelectNodes("//match"); 
    for (int i = 0; i < lst.Count; i++) 
    { 
       XmlNode node = lst[i]; 
       string URL = lst[i].InnerText; 

       var request = (HttpWebRequest)WebRequest.Create(URL); 
       HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
       string responseURI = response.ResponseUri.ToString(); 

       //XLWorkbook workbook = new XLWorkbook(); 
       //DataTable table = GetYourTable(); 
       //workbook.Worksheets.Add(table); 
    } 

以上方法花費太多時間,我不擅長「線程」概念,所以請幫助我。

回答

1

嘗試Parallel.ForEach/For。

using System.Threading; 
using System.Threading.Tasks; 

Parallel.For(0, lst.Count, index => 
{ 
      string URL = lst[index].InnerText; 

      var request = (HttpWebRequest)WebRequest.Create(URL); 
      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
      string responseURI = response.ResponseUri.ToString(); 

}); 

https://msdn.microsoft.com/en-us/library/dd460720(v=vs.110).aspx

foreach循環就像一個for循環。源收集分區爲 ,並且基於 系統環境在多個線程上調度工作。並行方法運行的越快,系統上的處理器就越多。

您可以使用這兩種填充列表與您迴應並進一步proccess,或者如果你想要把在GUI上調用invoke()將UI控件來安排它在各自的消息循環。

備註:XmlNodeList公開一個枚舉器,因此不需要[]運算符來訪問它; foreach將爲您提供所有的子元素。

編輯:看起來像C#不能解析XmlNodeList枚舉器到XmlNode。我不知道爲什麼要誠實 - 但你可以使用Parallel.For代替

+0

嗨,貓頭鷹,謝謝你的反應。但我越來越低於錯誤。請進一步指導我。 http://i.stack.imgur.com/uia6Z.png – vijay

+0

由於某種原因,Foreach似乎無法在XmlNodeList上工作。看我的編輯。 – srandppl

+0

謝謝Owlsolo,它的工作 – vijay