0

有多个url,我使用异步请求调用url,但是大多数请求都超时了。url是可访问的,异步请求只有其中一个url,才能得到响应。代码如下:

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 回答