我的目标是在最短的时间内从最多6000个网址获得答案。它工作得非常好(5200局域网地址为12秒),直到一些延迟开始发生。
我的代码最多使用20个HttpWebRequest.BeginGetResponse与ThreadPool.RegisterWaitForSingleObject
进行超时处理。
然而,有些(最多4个,每5,000个)请求从未使用第二个参数(timedOut)为true来触发TimeoutCallback函数,并且它们浪费了我宝贵时间的5分钟,直到它们点击了theBeginGetResponseCallback函数然后引发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种可能的结果:
第四种可能性是延迟我的申请,我不知道如何缩短延迟
更新
方法GetResponseStream
而不是GetResponse
是否可能导致超时?
答案 0 :(得分:4)
听起来您需要设置请求对象的ReadWriteTimeout属性。
答案 1 :(得分:1)
.Timeout =尝试建立连接所花费的时间(不包括查找时间).ReadWriteTimeout =连接建立后尝试读取或写入数据所花费的时间