Suponiendo que el proceso no finaliza abruptamente (o cuelgue, por supuesto), el bloque finally siempre se ejecutará.
Si no hay un bloque final, la excepción del bloque catch simplemente se lanzará a la pila. Tenga en cuenta que la excepción original que causó la ejecución del bloque catch en primer lugar se perderá efectivamente.
excepciones de desbordamiento de pila
Como se señaló Jared, un desbordamiento de pila hará que el fin no bloque a ejecutar. Creo que esto termina el programa abruptamente, pero podría estar equivocado. Aquí está el código de ejemplo:
using System;
public class Test
{
static void Main()
{
// Give the stack something to munch on
int x = 10;
try
{
Main();
Console.WriteLine(x);
}
finally
{
Console.WriteLine("Finally");
}
}
}
Resultados:
proceso termina debido a StackOverflowException.
creo una verdadera excepción de desbordamiento de pila también puede evitar que un fin que se ejecuten. Sin embargo, no puedo encontrar la documentación para esto. – JaredPar
@Jared: Sí, creo que posiblemente tengas razón. ¿OutOfMemoryException también? No estoy seguro de eso. Intentare reproducir –
¿Pero una StackOverflowException finaliza todo el proceso abruptamente? Si es así, viene bajo mi primer cheque. –