CriticalHandle.ReleaseHandle Methode

Definition

Führt beim Überschreiben in einer abgeleiteten Klasse den Code aus, der für das Freigeben des Handles erforderlich ist.

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

Gibt zurück

true, wenn das Handle erfolgreich freigegeben wurde, andernfalls im Fall eines schwerwiegenden Fehlers false. In diesem Fall wird ein releaseHandleFailed-Assistent für verwaltetes Debuggen (Managed Debugging Assistant, MDA) generiert.

Hinweise

Die ReleaseHandle -Methode wird garantiert nur einmal aufgerufen, vorausgesetzt, Sie verwenden geeignete Synchronisierungsmechanismen, um sicherzustellen, dass nur ein Aufruf der -Methode oder Dispose erfolgtClose. Die ReleaseHandle -Methode wird nicht aufgerufen, wenn die - oder IsClosed -IsInvalidEigenschaft isttrue. Implementieren Sie diese Methode in Ihren abgeleiteten CriticalHandle Klassen, um code auszuführen, der zum Freigeben des Handles erforderlich ist. Da eine der Funktionen von CriticalHandle darin besteht, die Verhinderung von Ressourcenlecks zu gewährleisten, darf der Code in Ihrer Implementierung von niemals ReleaseHandle fehlschlagen. Der Garbage Collector ruft auf ReleaseHandle , nachdem normale Finalizer für Objekte ausgeführt wurden, die gleichzeitig garbage collection wurden, und garantiert, dass die Ressourcen ihn aufrufen und dass er während der Ausführung nicht unterbrochen wird. Diese Methode wird zur instance Bauzeit (zusammen mit allen Methoden im statisch bestimmbaren Aufrufgraphen) als eingeschränkter Ausführungsbereich (CER) vorbereitet. Obwohl dadurch Threadabbruchunterbrechungen verhindert werden, müssen Sie dennoch darauf achten, keine Fehlerpfade in Die überschriebene ReleaseHandle Methode einzubringen. Wenden Sie das ReliabilityContractAttribute Attribut insbesondere auf alle Methoden an, die Sie aus ReleaseHandleaufrufen. In den meisten Fällen sollte dieser Code wie folgt sein:

ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)

Darüber hinaus können Sie für einfache Bereinigungen (z. B. das Aufrufen der Windows-API CloseHandle für ein Dateihandle) den Rückgabewert für den Aufruf der einzelnen Plattform überprüfen. Für komplexe Bereinigungen verfügen Sie möglicherweise über eine Menge Programmlogik und viele Methodenaufrufe, von denen einige fehlschlagen können. Sie müssen sicherstellen, dass Ihre Programmlogik über Fallbackcode für jeden dieser Fälle verfügt.

Wenn die ReleaseHandle Methode aus irgendeinem Grund zurückgibt false , generiert sie einen releaseHandleFailed Managed Debugging Assistant.

Gilt für:

Weitere Informationen