异步请求多个URL,大多数请求超时

时间:2013-08-28 01:47:12

标签: c# asynchronous timeout

有多个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);
        }

有人可以告诉我原因吗?

1 个答案:

答案 0 :(得分: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流的数量。