IDisposable
对象是一个好的练习,但您不必处理它。WebException.Response
或从中返回的流会导致您提到的问题,因为您可能会遇到尝试在上层调用链的异常处理程序中读取其属性的代码。HttpWebRequest
在抛出WebException
之前从网络流中生成了内存流,并且底层网络流已经关闭/处理。 因此,在那一点上,它实际上没有任何未管理的资源。 我假设这是为了更容易处理异常而做出的决定。WebException
中获取的HttpWebResponse
和/或相关流的问题,但是鉴于许多应用程序依赖于当前行为,这种情况高度不太可能发生改变。IDisposable
对象。如果可能的话,请使用HttpClient
类,这样您就完全不必处理这种情况。如果不能这样做,请考虑自己处理WebException
并抛出新类型的异常,该异常不会向代码调用者公开WebException
,以便在您处置它后不会遇到调用者试图访问WebException.Response
的情况。您应该释放此流,因为它可能包含资源。但只有在使用完成后才需要释放它。在不再需要该流之前,停止释放它即可。将流的最后一个用户释放它。
可能应该仅调用GetResponseStream()
一次,并明确传递该流,以便清楚地表明它是相同的流。