2012-02-19 33 views
1

我正在做一些HTTP頭測試來檢查url是否存在。我使用隨機生成的字符串網址通過調用HttpRequest函數的while循環執行此操作。問題是,只要HttpWebRequest是異步,while循環一直運行着大量的進程同時檢查很多鏈接的地獄。所以我想要做的就是延遲while循環幾秒/毫秒,或者等待HttpWebRequest一次只處理3個請求。我只是迷失在這裏,我不知道如何去做。延遲while循環在c中執行HttpRequest#

我while循環看起來像這樣

String Episode = textBox1.Text; 
      String Rand = newInt(16); 
      String Url = "http://someurl.com?_" + Episode + "paradisehotel_" + Rand + ".wmv"; 

      while (checkUrl(Url) == false) 
      { 
       Rand = newInt(16); 
       while (isInList(Rand, list)) 
       { 
        Rand = newInt(16); 
       } 

       list.Add(Rand); 

       Url = "someurl.com_" + Episode + "paradisehotel_" + Rand + ".wmv"; 
      } 

我CheckUrl功能看起來像這樣

private bool checkUrl(String url) 
{ 

    HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(@url); 
    req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"; 
    try 
    { 
     WebResponse response = req.GetResponse(); 
     return true; 
    } 
    catch (WebException ex) 
    { 
     Console.WriteLine(ex.Message); 
     return false; 
    } 

} 

我希望有人比我更方式有聰明的解決方案。 謝謝大多 喬納斯

+0

任何你沒有使用[WebClient Class](http://msdn.microsoft.com/en-us/library/system.net.webclient.aspx)的理由? – dtb 2012-02-19 10:55:23

+0

我真的不知道那個班。我只需要檢查鏈接是否存在或返回403或類似的東西。 web客戶端可以這樣做嗎? – 2012-02-19 11:03:12

+0

您發佈的代碼是單一的,但不是異步。你是說你想使用BeginGetResponse()?此方法確實有異步回調,您可以使用它來增加計數器。然後在執行下一個請求之前檢查計數器。 – AaronHS 2012-02-19 12:59:43

回答

1

就拿例如here(太多的代碼複製,這一切在這裏貼)回調裏面,它採用異步回調,並增加一個靜態計數器,您已加載的響應之後。然後,您需要做的就是在執行下一個請求之前,使用thread.sleep檢查計數器是否在while循環的每次迭代中都不超過最大值。

+0

這個工作就像一個魅力。非常感謝你。 – 2012-02-23 18:16:23

+0

很好聽:) – AaronHS 2012-02-24 12:43:58