2

この質問は 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>
4

1 に答える 1

0

一般的な .net の動作とは思えません。

バグのようですね - xamarin の bugzilla に報告してください。https://bugzilla.xamarin.com/

于 2012-09-15T19:03:11.290 に答える