Condividi tramite


CriticalHandle.ReleaseHandle Metodo

Definizione

Quando ne viene eseguito l'override in una classe derivata, esegue il codice necessario per liberare l'handle.

protected:
 abstract bool ReleaseHandle();
protected abstract bool ReleaseHandle ();
abstract member ReleaseHandle : unit -> bool
Protected MustOverride Function ReleaseHandle () As Boolean

Restituisce

true se l'handle viene rilasciato correttamente; in caso contrario, se si verifica un errore irreversibile, false. In questo caso, genera un assistente al debug gestito releaseHandleFailed.

Commenti

Il ReleaseHandle metodo viene chiamato una sola volta, purché si usino meccanismi di sincronizzazione appropriati per garantire che venga eseguita una sola chiamata al Close metodo o Dispose . Il ReleaseHandle metodo non verrà chiamato se la IsInvalid proprietà o IsClosed è true. Implementare questo metodo nelle CriticalHandle classi derivate per eseguire qualsiasi codice necessario per liberare l'handle. Poiché una delle funzioni di è quella di CriticalHandle garantire la prevenzione delle perdite di risorse, il codice nell'implementazione di ReleaseHandle non deve mai avere esito negativo. Il Garbage Collector chiama ReleaseHandle dopo l'esecuzione dei normali finalizzatori per gli oggetti che sono stati raccolti contemporaneamente e garantisce che le risorse da richiamare e che non vengano interrotte mentre è in corso. Questo metodo verrà preparato come area di esecuzione vincolata (CER) in fase di costruzione dell'istanza (insieme a tutti i metodi nel grafico delle chiamate determinabili in modo statico). Sebbene ciò impedisca interruzioni di thread, è comunque necessario prestare attenzione a non introdurre percorsi di errore nel metodo sottoposto ReleaseHandle a override. In particolare, applicare l'attributo ReliabilityContractAttribute a qualsiasi metodo chiamato da ReleaseHandle. Nella maggior parte dei casi questo codice deve essere:

ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)

Inoltre, per la pulizia semplice (ad esempio, chiamando l'API CloseHandle Windows in un handle di file) è possibile controllare il valore restituito per la singola chiamata platform invoke. Per la pulizia complessa, potrebbe essere disponibile una grande logica di programma e molte chiamate di metodo, alcune delle quali potrebbero avere esito negativo. È necessario assicurarsi che la logica del programma abbia codice di fallback per ognuno di questi casi.

Se il ReleaseHandle metodo restituisce false per qualsiasi motivo, genera un Assistente debug gestito releaseHandleFailed .

Si applica a

Vedi anche