通常,编写类似这样的代码来使用 WebRequest 下载一些数据。
using(WebResponse resp = request.GetResponse()) // WebRequest request...
using(Stream str = resp.GetResponseStream())
; // do something with the stream str
现在,如果抛出 WebException,则 WebException 具有对 WebResponse 对象的引用,该对象可能调用也可能不调用 Dispose(取决于异常发生的位置,或响应类的实现方式)——我不知道。
我的问题是应该如何处理这个问题。是否应该进行非常防御性的编码,并在 WebException 对象中处理响应(这会有点奇怪,因为 WebException 不是 IDisposable)。还是应该忽略这一点,可能访问已处置的对象或从不处置 IDisposable 对象?MSDN 文档中针对 WebException.Response 给出的示例是完全不够的。