为什么HttpWebRequest有时会抛出OperationCanceledException或WebException.timeout?

dou*_*lnt 5 c# httpwebrequest

最近,在HttWebRequest验证项目中的timeout和ReadWriteTimeout功能时遇到了一个严重的问题。

有两个部分代码,第一个抛出

未处理的异常:System.Net.WebException:操作已超时。在System.Net.HttpWebRequest.GetResponse()

HttpWebRequest request = (HttpWebRequest) WebRequest.Create("https://www.stackoverflow.com");
request.Timeout = 5000;
HttpWebResponse response = (HttpWebResponse) request.GetResponse();

HttpWebRequest request2 = (HttpWebRequest) WebRequest.Create("https://www.stackoverflow.com");
request2.Timeout = 1;
 HttpWebResponse response2 = (HttpWebResponse) request2.GetResponse();
Run Code Online (Sandbox Code Playgroud)

然后下一节代码抛出

未处理的异常:System.OperationCanceledException:操作已取消。在System.Net.HttpWebRequest.GetResponse()

HttpWebRequest request = (HttpWebRequest) WebRequest.Create("https://www.stackoverflow.com");
request.Timeout = 5000;
HttpWebResponse response = (HttpWebResponse) request.GetResponse();

request = (HttpWebRequest) WebRequest.Create("https://www.stackoverflow.com");
request.Timeout = 1;
response = (HttpWebResponse) request.GetResponse();
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会抛出不同的异常?

我猜可能的原因之一是keep-alive默认情况下是ture吗?但是我转过头了。