En gros, j'ai entendu dire que certaines conditions feraient exploser .net après le dernier blocage. Est-ce que quelqu'un sait quelles sont ces conditions?
Réponses
Trop de publicités?Deux possibilités:
Le bloc finally ne sera pas exécuté quand il y a un StackOverflowException
car il n'y a pas de place sur la pile à même d'exécuter plus de code. Il ne sera également pas être appelé quand il y a un ExecutionEngineException
, qui pourraient résulter d'un appel à l' Environment.FailFast()
.
Vous pouvez obtenir une situation où le code dans le bloc try, une SecurityException être lancée avant le bloc try entrée (au lieu de l'exception est levée lorsque le contenant méthode est appelée (voir http://msdn.microsoft.com/en-us/library/fk6t46tz(SV.71).aspx)), dans ce cas, vous ne pénètrent jamais dans le bloc try donc le code dans le bloc finally est jamais appelée.
D'autres possibilités incluent StackOverflowException, et ExecutingEngineException.
Ni le code qui suit un bloc finally, ni de code dans des étendues extérieures, exécute sans le bloc finally avoir été commencé d'abord (une exception dans le bloc finally peut l'amener à quitter prématurément, dans ce cas, l'exécution de sauter en dehors de l'outil de finalisation à l'extérieur de la portée). Si le code avant le bloc finally est coincé dans une boucle sans fin ou une méthode qui se ferme jamais, ou si le contexte d'exécution est entièrement détruits, le bloc finally sera pas exécuté.
Notez qu'il est bon de compter sur enfin blocs, contrairement à "Finaliser" les méthodes (ou C# "destructeurs") qui ne devraient pas être valablement invoqué.