Поделиться через


CriticalHandle.ReleaseHandle Метод

Определение

При переопределении в производном классе выполняет код, необходимый для освобождения дескриптора.

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

Возвращаемое значение

Значение true, если дескриптор освобождается успешно; в противном случае при катастрофическом сбое — значение false. В таком случае создается управляемый помощник по отладке releaseHandleFailed.

Комментарии

Метод ReleaseHandle гарантированно вызывается только один раз при условии, что вы используете надлежащие механизмы синхронизации, чтобы гарантировать выполнение только одного вызова Close метода или Dispose . Метод ReleaseHandle не будет вызываться, IsInvalid если свойство или IsClosed имеет значение true. Реализуйте этот метод в CriticalHandle производных классах, чтобы выполнить любой код, необходимый для освобождения дескриптора. Так как одна из функций CriticalHandle состоит в том, чтобы гарантировать предотвращение утечек ресурсов, код в вашей реализации никогда не должен завершаться ошибкой ReleaseHandle . Сборщик мусора вызывает ReleaseHandle после выполнения обычных методов завершения для объектов, которые были собраны в то же время, и гарантирует ресурсы для его вызова и что он не будет прерван во время выполнения. Этот метод будет подготовлен как область ограниченного выполнения (CER) во время создания экземпляра (вместе со всеми методами в его статически определяемом графе вызовов). Несмотря на то, что это предотвращает прерывания потока, все равно следует соблюдать осторожность, чтобы не вводить пути сбоя в переопределенном методе ReleaseHandle . В частности, примените ReliabilityContractAttribute атрибут к любым методам, вызываемому из ReleaseHandle. В большинстве случаев этот код должен быть следующим:

ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)

Кроме того, для простой очистки (например, для вызова API CloseHandle Windows в дескрипторе файла) можно проверить возвращаемое значение для вызова вызова одной платформы. Для сложной очистки может быть много логики программы и много вызовов методов, некоторые из которых могут завершиться ошибкой. Необходимо убедиться, что логика программы содержит резервный код для каждого из этих случаев.

ReleaseHandle Если метод возвращается false по какой-либо причине, он создает помощник по управляемой отладке releaseHandleFailed.

Применяется к

См. также раздел