2010-09-08 17 views

Respuesta

12

Sí.

¡Pruébalo y mira!

+1

Jaja, enseñar a un hombre a pescar ...;) –

+4

..... y pronto descubrirás que deberías haberle enseñado a nadar primero :) –

6

lo suficientemente simple para probar:

try 
{ 
    Response.Redirect(someurl); 
} 
finally 
{ 
    File.WriteAllText("C:\\Temp\\test.txt", "The finally block ran."); 
} 
3

¿Por qué no sólo lo intenta?

finallysiempre carreras, excepto en estos escenarios extremos:

  • caída de la aplicación total o cierre de la aplicación (por ejemplo FailFast())
  • un número limitado de excepciones graves
  • Hilos conseguir terminados (por ejemplo, Thread.Abort())
  • Fallo de hardware (por ejemplo, pérdida de potencia de la máquina)
  • Infinite loo p dentro del try-block (que finalmente da como resultado la terminación de la aplicación)
+2

Oh, no, no es este argumento otra vez :) Hay varias instancias en las que un bloque "por fin" no se ejecutará. Se ha discutido antes: http://stackoverflow.com/questions/3216046/does-the-c-finally-block-always-execute – David

+0

Respuesta editada para ser un poco más preciso. Aún así, excepto en casos EXTREME, finalmente * siempre * se ejecuta. – abelenky

2

Sí. Se garantiza que se ejecutará el código en el finally, a menos que ocurra algo catastrófico.

2

Sí. Aquí es cómo puede verificar si estoy en lo cierto o no. Simplemente coloque un cuadro de mensaje o escriba algo a la consola por fin y obtendrá su respuesta.

4

Lo hará de hecho. Vea este artículo de MSDN: Finally always executes

+1

"Finalmente siempre se ejecuta". Bueno, no siempre. http://stackoverflow.com/questions/3216046/does-the-c-finally-block-always-execute – David

+0

@David Touche. Finalmente siempre se ejecuta, salvo una catástrofe más allá del control del CLR. ¿Mejor?:) –

+0

@Dave: Es un tema divertido de contemplar, ¿verdad? Puedo usarlo como una pregunta de entrevista la próxima vez que me encuentre haciendo una pre-pantalla técnica sobre un candidato: "¿Un bloqueo 'por fin' siempre garantiza la ejecución, y si no, en qué casos no?" Hasta ahora puedo pensar en 7 escenarios distintos (aunque algunos de los cuales están estrechamente relacionados) que lo evitarían. – David

6

Se ejecutará. Response.Redirect en realidad arroja una ThreadAbortException, por lo que el código posterior no se ejecutará (excepto cualquier cosa en un bloque finally, por supuesto).

3

El código en el finalmente se ejecutará, pero se ejecutará antes de la redirección, ya que la redirección no se enviará al navegador hasta que se devuelve el método, y, finalmente, el código se ejecutará antes de que el método devuelve.

3

Prueba esto:

try 
{ 
    Response.Redirect("http://www.google.com"); 
} 
finally 
{ 
    // Will this code run? 
    // yes :) 
    Response.Redirect("http://stackoverflow.com/questions/3668422/will-code-in-finally-run-after-a-redirect"); 

} 
2

La regla general es que el código en finalmente se aplicará en todos los casos (try/catch)

Cuestiones relacionadas