【问题标题】:Asynchronous request multiple URLs, and most requests are timed out异步请求多个url,大部分请求超时
【发布时间】:2013-08-28 01:47:12
【问题描述】:

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

谁能告诉我原因?

【问题讨论】:

    标签: c# asynchronous timeout


    【解决方案1】:

    不完全是一个答案,但如果你有 .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 流的数量。

    【讨论】:

    • 如何做到“尽快”?我也有发送数百个请求的情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 2018-04-10
    • 2014-09-29
    相关资源
    最近更新 更多