c# - operando - que es using en programacion
¿Aún se llama a Dispose cuando se lanza una excepción dentro de una instrucción using? (2)
Así es como el reflector decodifica el IL generado por su código:
private static void Main(string[] args) { SqlConnection conn = new SqlConnection("..."); try { conn.Open(); DoStuff(); } finally { if (conn != null) { conn.Dispose(); } } }
Entonces la respuesta es sí, cerrará la conexión si
DoStuff() arroja una excepción.
En el siguiente ejemplo, ¿la conexión se cerrará y desechará cuando se produzca una excepción si está dentro de una instrucción using
?
using (var conn = new SqlConnection("..."))
{
conn.Open();
// stuff happens here and exception is thrown...
}
Sé que este código a continuación se asegurará de que lo haga, pero tengo curiosidad de cómo lo hace el uso de la declaración.
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();
}
Relacionado:
¿Cuál es la forma correcta de garantizar que una conexión SQL se cierre cuando se lanza una excepción? Sí, al using
su código en un bloque try / finally donde la porción final llamará a Dispose()
si existe. Sin embargo, no llamará directamente a Close()
ya que solo verifica la interfaz IDisposable
que se está implementando y, por lo tanto, el método Dispose()
.
Ver también:
- Interceptar una excepción dentro de IDisposable.Disponer
- ¿Cuál es la forma correcta de garantizar que una conexión SQL se cierre cuando se lanza una excepción?
- C # "Utilizando" la sintaxis
- C # USING keyword: ¿cuándo y cuándo no usarla?
- ''using'' statement vs ''try finally''
- ¿Qué es el bloque C # Using y por qué debería usarlo?
- Desechable usando el patrón
- ¿Finaliza el uso de cerrar una conexión de SQL abierta