【发布时间】:2010-09-28 02:02:48
【问题描述】:
我的目标是在最短的时间内从多达 6000 个网址中得到答案。它运行良好(5200 个 LAN 地址需要 12 秒),直到开始出现一些延迟。
我的代码最多同时使用 20 个 HttpWebRequest.BeginGetResponse 和 ThreadPool.RegisterWaitForSingleObject 进行超时处理。
但是,有些请求(最多 5,000 个中的 4 个)从未在第二个参数 (timedOut) 为 true 的情况下到达 TimeoutCallback 函数,并且它们浪费了我 5 分钟的宝贵时间,直到它们到达 BeginGetResponseCallback 函数并引发 WebException。异常显示类似于“操作已达到时间限制”,但由于异常消息是葡萄牙语(我的母语),我无法谷歌搜索。
我想知道我是否可以将此时间限制减少到例如 20 秒。有谁知道怎么做?我已经试过了:
<system.web>
<httpRuntime executionTimeout="20"/>
</system.web>
但是当我将它作为控制台应用程序运行时,ASP.NET 配置不起作用。我也试过了:
myHttpWebRequest.Timeout = 20*1000;
和
ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), AsyncState, 20*1000, true);
没有成功。你能帮帮我吗?
更新 我想说的是异步 HTTP 请求有 4 种可能的结果:
- 永远无法到达回调函数 -> 超时回调函数
- 成功到达并回答
- 到达并引发异常
- 恰好延迟 5 分钟,直到在回调函数中引发“时间限制”网络异常
第四种可能是我的申请延迟了,我不知道如何缩短延迟
更新
是否有可能是方法GetResponseStream 而不是GetResponse 是导致超时的原因?
【问题讨论】:
标签: .net timeout webrequest