Udostępnij za pośrednictwem


CriticalHandle.ReleaseHandle Metoda

Definicja

Po zastąpieniu w klasie pochodnej wykonuje kod wymagany do zwolnienia uchwytu.

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

Zwraca

true jeśli uchwyt zostanie wydany pomyślnie; w przeciwnym razie w przypadku katastrofalnego błędu , false. W takim przypadku generuje on wydanieHandleFailed Managed Debug Assistant.

Uwagi

Metoda ReleaseHandle ma być wywoływana tylko raz, pod warunkiem że stosujesz odpowiednie mechanizmy synchronizacji, aby upewnić się, że wykonano tylko jedno wywołanie Close metody lub Dispose . Metoda ReleaseHandle nie zostanie wywołana, jeśli IsInvalid właściwość lub IsClosed to true. Zaimplementuj tę metodę w klasach pochodnych, CriticalHandle aby wykonać dowolny kod wymagany do zwolnienia uchwytu. Ponieważ jedną z funkcji jest CriticalHandle zagwarantowanie zapobiegania wyciekom zasobów, kod w implementacji ReleaseHandle programu nigdy nie może zakończyć się niepowodzeniem. Wywołania ReleaseHandle modułu odśmiecywania pamięci po normalnym finalizatorze zostały uruchomione dla obiektów, które zostały zebrane w tym samym czasie, i gwarantuje, że zasoby do jego wywołania i że nie zostaną przerwane, gdy jest w toku. Ta metoda zostanie przygotowana jako ograniczony region wykonywania (CER) w czasie budowy wystąpienia (wraz ze wszystkimi metodami w statycznie determinowalnym grafie wywołań). Mimo że zapobiega to przerwaniu wątku, nadal należy zachować ostrożność, aby nie wprowadzać żadnych ścieżek błędów w metodzie przesłoniętej ReleaseHandle . W szczególności zastosuj ReliabilityContractAttribute atrybut do dowolnych metod wywoływanych z ReleaseHandleklasy . W większości przypadków ten kod powinien być następujący:

ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)

Ponadto w celu prostego czyszczenia (na przykład wywoływania interfejsu API CloseHandle systemu Windows na dojściu do pliku) można sprawdzić wartość zwracaną dla wywołania wywołania pojedynczej platformy. W przypadku złożonego czyszczenia może istnieć wiele logiki programu i wiele wywołań metod, z których niektóre mogą zakończyć się niepowodzeniem. Upewnij się, że logika programu ma kod rezerwowy dla każdego z tych przypadków.

ReleaseHandle Jeśli metoda zwróci false dowolną przyczynę, generuje ona asystenta debugowania zarządzanego releaseHandleFailed.

Dotyczy

Zobacz też