Web请求超时处理?

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Timeout = 20000; using (WebResponse response = request.GetResponse()) using (var stream = response.GetResponseStream()) using (var reader = new StreamReader(stream)) { var result = reader.ReadToEnd(); // Do something with result } 

在上面的例子中我定义了一个超时,如果碰巧超时,我怎么知道,结果是空的?

我收到任何响应类型吗?

我怎样才能确保我超时?

GetResponse()会抛出WebException 。 测试确切地发生什么很简单 – 将超时设置为1ms并尝试点击需要一段时间才能返回的任何内容。

事实上, 文档明确说明了这一点:

如果超时期限在可以返回资源之前到期,则抛出WebException。

您的HttpWebRequest.GetResponse调用将在以下情况下抛出WebException ;

 Abort was previously called. -or- The time-out period for the request expired. -or- An error occurred while processing the request. 

抓住这个例外。

我曾经只是拉出我的网线来测试这种东西,虽然你可以更优雅并使用代理工具并阻止该特定请求。

您可能应该使用HTTPWebResponse 。 它有一个状态代码,可以告诉您该信息等。 HTTPWebResponse是WebResponse的后代。