2010-03-25 21 views
5

Considere el siguiente código donde LockDevice() podría fallar y emitir una excepción por sí mismo. ¿Qué sucede en C# si se produce una excepción desde dentro de un bloque finally?Excepción desde dentro de un bloque finally

 
UnlockDevice(); 

try 
{ 
    DoSomethingWithDevice(); 
} 
finally 
{ 
    LockDevice(); // can fail with an exception 
} 
+0

Otra buena pregunta es "¿qué ocurre si se lanza una excepción de aborto hilo después UnLockDevice desbloquea el dispositivo, pero antes de entrar en la región try-protegida?" La respuesta: el dispositivo permanece desbloqueado. Parece un código bastante inseguro. –

Respuesta

10

Exactamente lo mismo que sucedería si no estuviese en un bloque finally: una excepción podría propagarse desde ese punto. Si es necesario, se puede try/catch dentro del último:

try 
{ 
    DoSomethingWithDevice(); 
} 
finally 
{ 
    try 
    { 
     LockDevice(); 
    } 
    catch (...) 
    { 
     ... 
    } 
} 
-2

El método se llama Try/Catch

Dónde es su truco?

UnlockDevice(); 

try 
{ 
    DoSomethingWithDevice(); 
} 
catch(Exception ex) 
{ 
    // Do something with the error on DoSomethingWithDevice() 
} 
finally 
{ 
    try 
    { 
     LockDevice(); // can fail with an exception 
    } 
    catch (Exception ex) 
    { 
     // Do something with the error on LockDevice() 
    } 
} 
+1

Seguramente solo es apropiado tener esto si es posible hacer algo constructivo con una excepción planteada desde ese método. Atraparlo cuando no hay nada apropiado que hacer es bastante inútil. – Paddy

+0

@Paddy Al menos debe REGISTRARSE para una revisión posterior sobre por qué generó una Excepción ... – balexandre

+0

Yo diría que eso depende de cómo esté configurado su sistema para manejar excepciones; en algunos casos, tiene más sentido permitir la excepción a burbujee y abandone la capa externa del sistema para registrar todas las excepciones, en lugar de saturar su código con líneas de registro. Si traga la excepción, definitivamente debe iniciar sesión, sin embargo. – Paddy

Cuestiones relacionadas