CriticalHandle.ReleaseHandle Metod

Definition

När den åsidosättas i en härledd klass kör den kod som krävs för att frigöra handtaget.

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

Returer

true om handtaget har släppts. annars, i händelse av ett katastrofalt fel, false. I det här fallet genererar den en releaseHandleFailed Managed Debugging Assistant.

Kommentarer

Metoden ReleaseHandle anropas garanterat bara en gång, förutsatt att du använder lämpliga synkroniseringsmekanismer för att säkerställa att endast ett anrop till Close metoden eller Dispose görs. Metoden ReleaseHandle anropas inte om IsInvalid egenskapen eller IsClosed är true. Implementera den här metoden i dina CriticalHandle härledda klasser för att köra all kod som krävs för att frigöra handtaget. Eftersom en av funktionerna CriticalHandle i är att garantera förebyggande av resursläckor får koden i implementeringen av ReleaseHandle aldrig misslyckas. Skräpinsamlaren anropar ReleaseHandle efter att normala slutförare har körts för objekt som har skräpinsamlats samtidigt och garanterar att resurserna anropar den och att den inte avbryts medan den pågår. Den här metoden förbereds som en begränsad körningsregion (CER) vid instansens byggtid (tillsammans med alla metoder i dess statiskt determinabla anropsdiagram). Även om det förhindrar att tråden avbryts måste du ändå vara noga med att inte införa några felsökvägar i den åsidosatta ReleaseHandle metoden. Använd i synnerhet ReliabilityContractAttribute attributet på alla metoder som du anropar från ReleaseHandle. I de flesta fall bör den här koden vara:

ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)

För enkel rensning (till exempel genom att anropa Windows API CloseHandle på ett filhandtag) kan du kontrollera returvärdet för det enskilda plattformsanropet. För komplex rensning kan du ha mycket programlogik och många metodanrop, varav vissa kan misslyckas. Du måste se till att programlogik har reservkod för vart och ett av dessa fall.

ReleaseHandle Om metoden av någon anledning returneras false genererar den en releaseHandleFailed Managed Debugging Assistant.

Gäller för

Se även