この質問は Monotouch に関するものですが、一般的な .NET の問題または Mono ライブラリの問題である可能性があります。
私は非常に長い間見た中で最も奇妙な問題を経験しています。
各スレッドが HttpWebRequest を作成する 2 つのスレッドを起動します。これらのスレッドは同時に (1 ミリ秒間隔で) 開始されます。最初の HTTP 要求 (url1) からの GetResponse() への呼び出しが、2 番目の HTTP 要求 (url2) の内容を受け取ることになります。この場合、2 番目の 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);
}
}
これは出力です(5回のうち4回):
Result for http://url1: <contents of http://url2>
Result for http://url2: [Exception: timeout...]
すべてが正常な場合 (5 回に 1 回):
Result for http://url1: <contents of http://url1>
Result for http://url2: <contents of http://url2>