CriticalHandle.ReleaseHandle Metoda

Definicja

Po przesłonięcia w klasie pochodnej program wykonuje kod wymagany do zwolnienia dojścia.

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

Zwraca

true w przypadku pomyślnego zwolnienia dojścia; w przeciwnym razie w przypadku katastrofalnego błędu, false. W takim przypadku generuje on asystenta debugowania zarządzanego releaseHandleFailed .

Uwagi

Gwarantuje ReleaseHandle się, że metoda zostanie wywołana 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 ma truewartość . Zaimplementuj tę metodę w CriticalHandle klasach pochodnych, aby wykonać dowolny kod wymagany do zwolnienia dojścia. Ponieważ jedną z funkcji programu CriticalHandle jest zagwarantowanie zapobiegania wyciekom zasobów, kod w implementacji ReleaseHandle programu nie może zakończyć się niepowodzeniem. Wywołania ReleaseHandle modułu odśmiecywania pamięci po normalnych finalizatorach zostały uruchomione dla obiektów, które zostały w tym samym czasie odebrane, i gwarantuje, że zasoby do jego wywołania i nie zostaną przerwane, gdy będzie 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ątków, nadal należy zachować ostrożność, aby nie wprowadzać żadnych ścieżek błędów w metodzie zastępowanej ReleaseHandle . W szczególności należy zastosować ReliabilityContractAttribute atrybut do wszystkich 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 w dojściu plików) 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.

Jeśli metoda zostanie zwrócona ReleaseHandlefalse z jakiegokolwiek powodu, wygeneruje asystenta debugowania zarządzanego releaseHandleFailed .

Dotyczy

Zobacz też