2014-10-02 23 views
0

我有一個windows窗體應用程序,它從文本文件讀取一串url(〜800)到List。應用程序然後顯示所有URL的狀態代碼。c中的多個HttpWebRequests#

問題是如果我運行一個正常的循環從0到列表計數,它需要很多時間。我需要儘可能地加快進程,而不會阻塞用戶界面。下面是我的代碼

private async void button1_Click(object sender, EventArgs e) 
{ 
    System.IO.StreamReader file = new System.IO.StreamReader("urls.txt"); 

     while ((line = file.ReadLine()) != null) 
     { 
      pages.Add(line); 

     } 
     file.Close(); 

     for(int i=0; i<pages.Count; i++) 
     { 
       HttpWebRequest request = (HttpWebRequest)WebRequest.Create(pages[i]); 
         int code = 0; 
         try 
         { 

          WebResponse response = await request.GetResponseAsync(); 

          HttpWebResponse r = (HttpWebResponse)response; 

          code = (int)r.StatusCode; 
         } 
         catch (WebException we) 
         { 
          var r = ((HttpWebResponse)we.Response).StatusCode; 
          code = (int)r; 
         } 
     } 
    //add the url and status code to a datagridview 
} 

回答

0

一種方法是使用任務,所以你是不是等待的最後一個請求完成,開始下一個之前。

Task<int> tasks; 
    for (int i = 0; i < 10; i++) 
    { 
    tasks = Task.Run<int>(() => 
     { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(pages[i]); 
     int code = 0; 
     try 
     { 

      WebResponse response = request.GetResponse(); 

      HttpWebResponse r = (HttpWebResponse)response; 

      code = (int)r.StatusCode; 
     } 
     catch (WebException we) 
     { 
      var r = ((HttpWebResponse)we.Response).StatusCode; 
      code = (int)r; 
     } 

     return code; 
     } 
    ); 
    } 
    await tasks; 
+0

使用此速度沒有明顯的速度變化。 – 2014-10-02 17:46:17