当 using 语句中抛出异常时,Dispose 是否仍会被调用?

2023-12-15

在下面的示例中,如果连接位于using陈述?

using (var conn = new SqlConnection("..."))
{
    conn.Open();
    // stuff happens here and exception is thrown...
}

我知道下面的代码将确保它确实如此,但我很好奇 using 语句是如何做到这一点的。

var conn;
try
{
    conn = new SqlConnection("...");
    conn.Open();
    // stuff happens here and exception is thrown...
}
// catch it or let it bubble up
finally
{
    conn.Dispose();
}

Related:

What is the proper way to ensure a SQL connection is closed when an exception is thrown?

Yes, using将您的代码包装在 try/finally 块中,其中finally部分将调用Dispose()如果存在的话。但是,它不会调用Close()直接,因为它只检查IDisposable正在实现的接口,因此Dispose() method.

也可以看看:

  • 拦截 IDisposable.Dispose 内部的异常
  • 确保抛出异常时关闭 SQL 连接的正确方法是什么?
  • C#“使用”语法
  • C# USING 关键字 - 何时以及何时不使用它?
  • “使用”语句与“最后尝试”
  • 什么是 C# using 块以及为什么要使用它?
  • 一次性使用图案
  • End using 是否关闭打开的 SQL 连接
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 using 语句中抛出异常时,Dispose 是否仍会被调用? 的相关文章

随机推荐