WebClient超时解决方案不起作用(子类化设置超时)

时间:2015-04-22 16:42:28

标签: c# timeout webclient

我正在尝试将此作为为WeblClient调用设置超时的常用解决方案。在我从离线机器请求URL的测试用例中:设置为1秒时,我一直得到20秒的超时。

public class TimeoutWebClient : WebClient
{
    public TimeoutWebClient(TimeSpan timeout)
    {
        _timeout = timeout;
    }
    private TimeSpan _timeout;

   protected override WebRequest GetWebRequest(Uri address)
   {
       WebRequest request = base.GetWebRequest(address);
       request.Timeout = (int)_timeout.TotalMilliseconds;
       return request;
   }
}

基于服务器的超时在这种情况下无关紧要。我能错过什么?

我找到了一个同时设置HttpWebRequest.ReadWriteTimeoutHttpWebRequest.ServicePoint.MaxIdleTime的代码段。但是将这些值设置为超时值仍然没有什么作用,并且仍然会得到~20秒的超时。

有什么可能导致这种行为的其他想法?

1 个答案:

答案 0 :(得分:1)

您是否有机会使用异步下载方法?

来自MSDN:

Timeout属性仅影响使用GetResponse方法发出的同步请求。要使异步请求超时,请使用Abort方法。