我需要设置.NET HttpWebRequest超时的帮助

我需要设置.NET HttpWebRequest超时的帮助,.net,timeout,webrequest,.net,Timeout,Webrequest,我的目标是在最短的时间内从多达6000个URL获得答案。它工作得非常好(5200个LAN地址为12秒),直到出现一些延迟 我的代码使用多达20个HttpWebRequest.BeginGetResponse与ThreadPool.RegisterWaitForSingleObject同时执行超时处理 但是,有些请求(高达5000分之4)在第二个参数(timedOut)为true时从未命中TimeoutCallback函数,它们浪费了我宝贵的5分钟时间,直到它们命中BeginGetResponse

我的目标是在最短的时间内从多达6000个URL获得答案。它工作得非常好(5200个LAN地址为12秒),直到出现一些延迟

我的代码使用多达20个HttpWebRequest.BeginGetResponse与
ThreadPool.RegisterWaitForSingleObject同时执行超时处理

但是,有些请求(高达5000分之4)在第二个参数(timedOut)为true时从未命中TimeoutCallback函数,它们浪费了我宝贵的5分钟时间,直到它们命中BeginGetResponseCallback函数,然后引发WebException。异常显示类似于“操作已达到时间限制”,但由于异常消息是葡萄牙语(我的母语),我无法用谷歌搜索它

例如,我想知道我是否可以把这个时间限制缩短到20秒。有人知道怎么做吗?我已经试过了:

<system.web>
    <httpRuntime executionTimeout="20"/>
</system.web>

没有成功。你能帮我吗

更新 我想说的是,异步HTTP请求有4种可能的结果:

  • 永远不要到达回调函数->超时回调函数
  • 成功到达并回答
  • 到达并引发异常
  • 延迟5分钟,直到在回调函数中引发“time limit”web异常
  • 第四种可能是延迟我的申请,我不知道如何缩短延迟时间

    更新
    是否有可能是方法
    GetResponseStream
    而不是
    GetResponse
    导致了超时?

    听起来您需要设置请求对象的ReadWriteTimeout属性


    .Timeout=尝试建立连接所花费的时间(不包括查找时间)。ReadWriteTimeout=在建立连接后尝试读取或写入数据所花费的时间

    谢谢,也许这就是解决方案。但是我必须等到问题再次出现才能测试它。你在下面帖子中的评论正好击中了它的头部。异步web请求忽略超时属性。因此,除非您滚动了自己的异步超时事件,否则web请求的超时将基于ReadWriteTimeOut而不是webrequest超时。可以在标准MS配置文件中设置默认值吗?
    myHttpWebRequest.Timeout = 20*1000;
    
    ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), AsyncState, 20*1000, true);