如果在using语句中抛出异常,清理逻辑还会被调用吗?

本文关键字:调用 语句 using 抛出异常 如果 | 更新日期: 2023-09-27 18:01:21

我有一些关于使用using关键字的问题。我有以下代码:

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

我的问题是,当异常发生时,它会关闭连接吗?还是我必须关闭阀内的连接?

如果在using语句中抛出异常,清理逻辑还会被调用吗?

是,它将关闭连接。

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 { }
 }

输出为:

我被处置了!