有多个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);
}
有人可以告诉我原因吗?
答案 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流的数量。