est-il garanti que votre code atteindre lefinally
? Oui (à moins d'un événement cataclysmique tel que la fin du monde ... ou, vous le savez, votre ordinateur perd de l'énergie ou votre système d'exploitation tombe en panne).
Mais il est important de savoir que, s'il est absolument essentiel que votre code s'exécute, mieux vaut vous assurer que votre code ne lance pas lui-même une exception!
Prenez ceci par exemple:
IDisposable someDisposableObject = null;
IDisposable someOtherDisposableObject = null;
try
{
someDisposableObject = GetDisposableObject();
throw new Exception("Holy crap, something bad happened.");
someOtherDisposableObject = GetOtherDisposableObject();
}
finally
{
// This will throw a NullReferenceException...
someOtherDisposableObject.Dispose();
// ...so this actually won't run.
someDisposableObject.Dispose();
}
Donc, si vous voulez que votre bloc toutefinally
à exécuter, il est important d'écrire correctement de sorte qu'une exception est (idéalement) impossible.
duplication possible d'un doublon: http://stackoverflow.com/questions/3216046/does-the-c-finally-block-always-execute-closed –
@Oren A: hehe, oui. et vous avez souligné que le fil était également fermé comme doublon))) à partir de ma question, je voulais souligner le comportement «enfin» sur les situations critiques, comme 'Stackoverflow' ou tout autre problème de mémoire – zerkms
Ceci est également répondu sur le lien I a donné. Lire au-delà de la réponse acceptée. –