CriticalHandle.ReleaseHandle Metoda

Definice

Při přepsání v odvozené třídě spustí kód potřebný k uvolnění popisovače.

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

Návraty

truepokud je popisovač úspěšně uvolněn; v opačném případě v případě katastrofického selhání . false V tomto případě vygeneruje releaseHandleFailed Managed Debugging Assistant.

Poznámky

Je ReleaseHandle zaručeno, že metoda bude volána pouze jednou za předpokladu, že použijete správné synchronizační mechanismy, které zajistí, že se provede pouze jedno volání Close metody nebo Dispose . Metoda ReleaseHandle nebude volána, pokud IsInvalid je truevlastnost nebo IsClosed . Implementujte tuto metodu v CriticalHandle odvozených třídách pro spuštění libovolného kódu, který je nutný k uvolnění popisovače. Vzhledem k tomu, že jednou z funkcí nástroje CriticalHandle je zajištění prevence úniku prostředků, nesmí kód ve vaší implementaci ReleaseHandle nikdy selhat. Volání uvolňování ReleaseHandle paměti po normálních finalizátorech byla spuštěna pro objekty, které byly uvolněny z paměti ve stejnou dobu, a zaručuje prostředky, aby ho vyvolaly, a že se nepřeruší, zatímco probíhá. Tato metoda bude připravena jako oblast omezeného spuštění (CER) v době výstavby instance (spolu se všemi metodami v jejím staticky určitelném grafu volání). I když to zabraňuje přerušení vlákna, musíte být stále opatrní, abyste v přepsanou ReleaseHandle metodu nezaváděli žádné cesty selhání. Zejména použijte atribut na ReliabilityContractAttribute všechny metody, které voláte z ReleaseHandle. Ve většině případů by tento kód měl být:

ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)

Kromě toho pro jednoduché vyčištění (například volání rozhraní WINDOWS API CloseHandle na popisovači souboru) můžete zkontrolovat návratovou hodnotu volání volání s jednou platformou. Pro komplexní čištění můžete mít spoustu logiky programu a mnoho volání metod, z nichž některá můžou selhat. Musíte zajistit, aby logika programu měla pro každý z těchto případů záložní kód.

Pokud metoda z nějakého ReleaseHandle důvodu vrátí false , vygeneruje releaseHandleFailed Managed Debugging Assistant.

Platí pro

Viz také