Da .NET 2.0 in poi è possibile terminare un processo corrotto irreparabilmente attraverso il medodo Environment.Failfast(string message), il quale provvede a:
- Scrivere una entry nell’Application Event Log con il messaggio specificato
- NON eseguire alcun blocco try-finally ancora in sospeso
- NON esegue alcun finalizer sugli oggetti ancora in memoria
- Esegue un dump dell’applicazione
- Termina il processo
I punti 2-3 sono necessari in un contesto simile in quanto la loro esecuzione potrebbe danneggiare risorse usate dall’applicazione stessa. Tuttavia gli oggetti CriticalFinalizerObject (di cui magari parlerò in un post a parte) sono comunque eseguiti prima di terminare il processo.