如果在using语句中抛出异常,是否仍会调用清理逻辑?

时间:2013-02-27 17:54:30

标签: c# winforms httpwebrequest try-catch using-statement

我对使用using关键字有疑问。我有以下代码:

try {
   using (System.Net.WebResponse response = httpWebRequest.GetResponse()) {
      throw new Exception("Example");
   }
} 

catch ( Exception ex ) { 
}

我的问题是,当发生异常时它会关闭连接吗?或者我必须关闭catch中的连接吗?

1 个答案:

答案 0 :(得分:4)

是的,它将关闭连接。

using的全部意义在于,当您离开using的范围时,它将处置该对象,即使它是通过异常。

引擎盖下的using块使用try/finally块实现。

这很容易通过实验测试:

public class Foo : IDisposable
{
    public void Dispose()
    {
        Console.WriteLine("I was disposed!");
    }
}

private static void Main(string[] args)
{
    try
    {
        using (var foo = new Foo())
            throw new Exception("I'm mean");
    }
    catch { }
 }

输出是:

  

我被处分了!