根据MSDN的说明,默认的WebRequest超时时间为100秒(100,000毫秒)。
那么,将Timeout设置为0(零)是否意味着立即超时请求?
如果是这样,那么你什么时候想要这样做?
如果是这样,那么你什么时候想要这样做?
是的,它会立即超时,您可以轻松地自行测试:
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;
}
}
}