2012-09-15 108 views
2

這個問題是關於Monotouch的,但它可能是一個普通的.NET問題或Mono庫的問題。HtttpWebRequest在另一個線程中返回請求的結果(Monotouch)

我正在經歷很長時間以來見過的最奇怪的問題。

我啓動2個線程,其中每個線程創建一個HttpWebRequest。這些線程在同一時間開始(好,相隔一毫秒)。會發生什麼是從第一個HTTP請求(url1)對GetResponse()的調用接收到第二個HTTP請求(url2)的內容。發生這種情況時,第二個HTTP請求在30秒後超時。

這不會每次都發生,但它確實發生在5次中的4次。

這是代碼:(簡化爲產生可工作的測試案例)

public void Launch() 
{ 
    Thread thread1 = new Thread(() => { GetData("http://url1"); }); 
    Thread thread2 = new Thread(() => { GetData("http://url2"); }); 

    thread1.Start(); 
    thread2.Start(); 
} 

public static void GetData(string url) 
{ 
    try 
    { 
     XDocument xDoc; 

     var webRequest = HttpWebRequest.Create(url); 

     using (var response = webRequest.GetResponse()) 
     { 
     using (var stream = response.GetResponseStream()) 
     { 
      xDoc = XDocument.Load(stream); 

      Logger.Default.Log("Result for {0}: {1}", url, xDoc); 
     } 
     } 
    } 
    catch(Exception ex) 
    { 
     Logger.Default.Log("Result for {0}: [Exception: {1}]", url, ex.Message); 
    } 
} 

這是輸出(4,滿分5次):

Result for http://url1: <contents of http://url2> 
Result for http://url2: [Exception: timeout...] 

當一切正常(1共5次):

Result for http://url1: <contents of http://url1> 
Result for http://url2: <contents of http://url2> 

回答

0

聽起來不像一般的.net行爲。

聽起來像一個錯誤 - 在Xamarin報告bugzilla? https://bugzilla.xamarin.com/

+1

提交了一個錯誤報告:https://bugzilla.xamarin.com/show_bug.cgi?id=7200 –

+0

頂尖的工作。當你得到答案或修復時,請回到這裏報告! – Stuart

+0

錯誤已得到確認 –

相關問題