0

複数の URL があり、非同期要求を使用して URL を呼び出しますが、ほとんどの要求はタイムアウトになります。URL にアクセスできます。非同期要求は URL のいずれか 1 つだけで、応答を取得できます。次のようなコード:

foreach (var url in URLs)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            IAsyncResult result = (IAsyncResult)request.BeginGetResponse(new AsyncCallback(RequestCallback), request);
            ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), request, request.Timeout, true);
        }

誰かが理由を教えてもらえますか?

4

1 に答える 1

0

正確な答えではありませんが、.net 4.5 と VS2012 を使用している場合は、async await を使用できます。これははるかにクリーンです。コードは...

var tasks = from url in URLs
            let request = WebRequest.Create(url)
            select request.GetRequestStreamAsync();
Stream[] results = Task.WaitAll(tasks);

しかし、これはコードを書くのにあまり良い方法ではありません。Windows では、プログラムが同時に開くことができる Http ストリームの数を制限する必要があるため、できるだけ早くストリームを処理する必要があります。

于 2013-08-28T02:42:04.760 に答える