HttpWebResponse - 如何正确释放连接

5

我正在用C#编写下载管理器,使用了多个http请求,想知道如何确保连接被正确关闭?

只调用响应流上的Dispose方法是否足够?还需要调用Close方法吗? 不确定哪里可能出错,但某些网站会变得无响应。

谢谢!

2个回答

9

将你的HttpWebResponse用using块包装起来:

using(HttpWebResponse response = request.GetResponse())
{
    // do stuff here
} // response object is automatically disposed of here. 

我熟悉using语句,但在完成后我已经调用了Dispose(),这有什么区别吗? - Meniya
当你像这样使用 using 时,你不需要担心自己调用 Dispose,编译器会为你处理它。 - Kyle Trauberman

0
如Kyle所提到的,将您的HttpWebResponse包装在using块中。但是,如果GetResponse()引发异常(例如在404响应上发生),则需要在异常中获取HttpWebResponse。
HttpWebResponse webResponse = null;
try {
    webResponse = (HttpWebResponse)webRequest.GetResponse();
} catch (WebException e) {
    webResponse = (HttpWebResponse)e.Response;
    if (webResponse == null) {
        // Handle this.
    }
}    
using (webResponse) {
    // Process the response.
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接