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>
提交了一個錯誤報告:https://bugzilla.xamarin.com/show_bug.cgi?id=7200 –
頂尖的工作。當你得到答案或修復時,請回到這裏報告! – Stuart
錯誤已得到確認 –