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
错误已得到确认 –