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

C# 如果从using语句中抛出异常,清理逻辑还会被调用吗?,c#,winforms,httpwebrequest,try-catch,using-statement,C#,Winforms,Httpwebrequest,Try Catch,Using Statement,我有一些关于使用和关键字的问题。我有以下代码: try { using (System.Net.WebResponse response = httpWebRequest.GetResponse()) { throw new Exception("Example"); } } catch ( Exception ex ) { } 我的问题是,当异常发生时,它会关闭连接吗?还是必须关闭锁扣内的连接?是的,它将关闭连接 使用的的整个要点是,当您使用离开的范围时,即使对

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

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

catch ( Exception ex ) { 
}

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

是的,它将关闭连接

使用
的整个要点是,当您使用
离开
的范围时,即使对象发生异常,它也会处理对象

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 { }
 }
输出为:

我被处置了

用户将处理(关闭)该对象。