2010-04-22 13 views
13

Cita de MSDN:finalizador C# throwing exception?

Si Finalizar o una anulación de Finalize arroja una excepción, el tiempo de ejecución ignora la excepción, finaliza ese método Finalize y continúa el proceso de finalización.

Sin embargo, si tengo:

~Person() 
{ 
throw new Exception("meh"); 
} 

entonces da lugar a una excepción de tiempo de ejecución?

p.s. Sé que esto nunca debería suceder, sin embargo, siento curiosidad por este comportamiento. Uno de nuestros clientes tuvo una captura de intento vacía alrededor de todos sus finalizadores ... ni siquiera se registró cuando las cosas salieron mal o relanzó el objeto:/

+2

Nunca debe usar finalizadores de todos modos. Nunca como en, a menos que sepa exactamente por qué tiene que usar eso. – Dykam

+0

"¿entonces resulta en una excepción de tiempo de ejecución?" ¿Estás diciendo que probaste esto y resulta en una excepción? ¿O nos estás pidiendo que probemos esto? – AaronLS

+1

SÍ causa una excepción de tiempo de ejecución. Dykam, gracias por decirme que nunca debería usar finalizadores ... ¡jaja! – sjhuk

Respuesta

22

Es importante vincular la fuente de su presupuesto. Debo asumir que se trata de una versión anterior de .NET, quizás la versión 1.x. Trató de ser "tolerante" con las excepciones no manejadas, tragándolas sin un chillido. Eso no funcionó bien, trozos de código fallando silenciosamente es extraordinariamente difícil de depurar.

La versión .NET 2.0 pone fin a eso, el host CLR predeterminado finaliza la aplicación para cualquier excepción no controlada. Una excepción en un finalizador es fatal.

+1

gracias Hans. Originalmente encontré la cita del nuevo libro O'Reilly .NET 4.0, sin embargo, la cita fue de .NET 1.1. Tal vez deberían actualizar el libro;) Gracias – sjhuk

+7

Guau, mala edición. Cuidado con el resto del libro. –

+2

Enlaces de MSDN: 4.0 http://msdn.microsoft.com/en-us/library/system.object.finalize(v=VS.100).aspx 1.1 http://msdn.microsoft.com/en-us/ library/system.object.finalize (v = VS.71) .aspx – MPritchard

Cuestiones relacionadas