2012-09-15 70 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

错误已得到确认 –

相关问题