Sì, ci sono tali situazioni. Ad esempio, chiamando lo , chiamando Environment.FailFast
o incontrando un errore CLR interno, il processo verrà chiuso senza eseguire alcun codice aggiuntivo. In tali situazioni, la cosa migliore che puoi fare è dire "vabbè".
Anche se il processo non si chiude inaspettatamente, chiamare Dispose
è un'azione manuale. Non è una cosa fatta attraverso il runtime, tranne quando un oggetto che implementa un finalizzatore che chiama Dispose
viene sottoposto a garbage collection. Pertanto, dimenticando di avvolgere un monouso in un using
o causare una perdita di memoria che mantiene vivo l'oggetto è un altro modo Dispose
non può mai essere chiamato.
L'unica pulizia affidabile viene eseguita dal sistema operativo quando un processo termina: tutti gli handle aperti agli oggetti di sistema vengono chiusi. Quando viene chiuso l'ultimo handle, qualsiasi pulizia eseguita nel sistema operativo o nel driver si verifica. Se questo codice di cleanup non fa parte di un driver ma deve essere chiamato da un processo utente, tutto ciò che puoi fare è rendere il tuo codice il più affidabile possibile, o implementare un processo watchdog che gestisca la pulizia per te.
fonte
2015-12-25 16:04:08
Cosa fare intendi specificamente per "spegnere"? Intendi dire se il potere si spegne o se viene lanciata un'eccezione non gestita? –
Eccezione. So che non c'è nulla di ragionevole che si possa fare se si spegne la corrente (la periferica si resetterà comunque in questo caso). Aggiornerò la domanda – JSideris
@cFrozenDeath Inoltre, intendevo quando il processo è terminato dal sistema operativo (o dall'utente). – JSideris