何时调用WebResponse.Close()

Sam*_*eet 13 .net c# httpwebresponse

WebResponse response;
try
{                
 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
 request.Timeout = 20000;
 response = request.GetResponse();

 request = (HttpWebRequest)WebRequest.Create(url2);
 response = request.GetResponse();
}
catch(Exception ex)
{
 //do something
}              
finally
{
}
Run Code Online (Sandbox Code Playgroud)

应该在哪里调用response.Close()?

  • 在尝试每个GetResponse()之后?

  • 在最后一次GetResponse()尝试 - 一次?

  • 在最后阻止?

Joh*_*ers 22

以上都不是.你应该使用一个using块:

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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

using块将确保Dispose方法被调用时,无论是否有异常.Dispose将执行与Close相同的操作.

using (var d = new DisposableClass()){code;}
Run Code Online (Sandbox Code Playgroud)

相当于:

DisposableClass d = null;
try
{
    d = new DisposableClass();
    code;
}
finally
{
    if (d != null)
        ((IDisposable)d).Dispose();
}
Run Code Online (Sandbox Code Playgroud)