Does Dispose still get called when exception is thrown inside of a using statement?
asp.net, c#, using-statement
Solution
Yes, `using` wraps your code in a try/finally block where the `finally` portion will call `Dispose()` if it exists. It won't, however, call `Close()` directly as it only checks for the `IDisposable` interface being implemented and hence the `Dispose()` method.
See also:
- Intercepting an exception inside IDisposable.Dispose
- What is the proper way to ensure a SQL connection is closed when an exception is thrown?
- C# "Using" Syntax
- C# USING keyword - when and when not to use it?
- 'using' statement vs 'try finally'
- What is the C# Using block and why should I use it?
- Disposable Using Pattern
- Does End Using close an open SQL Connection
Problem
In the example below, is the connection going to close and disposed when an exception is thrown if it is within a `using` statement? ``` using (var conn = new SqlConnection("...")) { conn.Open(); // stuff happens here and exception is thrown... } ``` I know this code below will make sure that it does, but I'm curious how using statement does it. ``` 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?
Related problems
- Disposable Using Pattern
- 'using' statement vs 'try finally'
- C# USING keyword - when and when not to use it?
- Does End Using close an open SQL Connection
- What is the C# Using block and why should I use it?
- C# "Using" Syntax
- What is the proper way to ensure a SQL connection is closed when an exception is thrown?
- Intercepting an exception inside IDisposable.Dispose