C#中如何将HttpWebRequest的超时时间设置为零?

7
根据MSDN的说明,默认的WebRequest超时时间为100秒(100,000毫秒)。 那么,将Timeout设置为0(零)是否意味着立即超时请求?
如果是这样,那么你什么时候想要这样做?
1个回答

7

是的,它会立即超时,您可以轻松地自行测试:

try
{
    WebRequest myWebRequest = WebRequest.Create("https://dev59.com/Vpjga4cB1Zd3GeqPQeCg");
    myWebRequest.Timeout = 0;
    WebResponse myWebResponse = myWebRequest.GetResponse();
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message); // timeout exceeded
}

为什么?我也问过自己同样的问题。也许是为了测试目的,或者如果您需要一个明显无法意外工作的默认值以确保该属性将在任何情况下设置。

有趣的是,除 -1 之外不允许负值,因为这是 System.Threading.Timeout.Infinite 的值。 这里是源代码:

public override int Timeout {
    get {
        return _Timeout;
    }
    set {
        if (value<0 && value!=System.Threading.Timeout.Infinite) {
            throw new ArgumentOutOfRangeException("value", SR.GetString(SR.net_io_timeout_use_ge_zero));
        }
        if (_Timeout != value)
        {
            _Timeout = value;
            _TimerQueue = null;
        }
    }
}

非常感谢你,Tim! - cd491415

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接