Search code examples
c#timeouthttpwebrequest

c# HttpWebRequest Timeout setting to zero


According to MSDN, default WebRequest timeout is 100 seconds (100,000 ms). Will that mean that setting Timeout to 0 (zero) will timeout request immediatelly?

If so, when would you want to do something like that?


Solution

  • Yes, it will timout immediately, you can test it yourself easily:

    try
    {
        WebRequest myWebRequest = WebRequest.Create("http://stackoverflow.com/questions/38340099/c-sharp-httpwebrequest-timeout-setting-to-zero");
        myWebRequest.Timeout = 0;
        WebResponse myWebResponse = myWebRequest.GetResponse();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message); // timeout exceeded
    }
    

    Why? I've asked myself the same. Maybe for testing purposes or if you need a default value that clearly doesn't work accidentially to ensure that the property will be set in any case.

    Interestingly negative values aren't allowed apart from -1, since that is the value of System.Threading.Timeout.Infinite. Here's the source:

    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;
            }
        }
    }