2014-10-02 2 views
0

У меня есть приложение для окон, которое читает кучу URL-адресов (~ 800) из текстового файла в список. Затем приложение отображает код состояния всех URL-адресов.Несколько HttpWebRequests в C#

Проблема. Если я запускаю нормальный цикл цикла от 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

Нет заметных изменений в скорости, используя это. –

Смежные вопросы