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 또는 Dispose 메서드에 대한 호출이 하나만 수행되도록 적절한 동기화 메커니즘을 사용하는 경우 메서드가 한 번만 호출 Close 되도록 보장됩니다. 또는 IsClosed 속성true이 인 ReleaseHandle 경우 메서드가 IsInvalid 호출되지 않습니다. 파생 클래스에서 CriticalHandle 이 메서드를 구현하여 핸들을 해제하는 데 필요한 모든 코드를 실행합니다. 의 CriticalHandle 기능 중 하나는 리소스 누수 방지를 보장하는 것이므로 구현 ReleaseHandle 의 코드는 실패해서는 안 됩니다. 가비지 수집기는 가비지 수집기가 동시에 수집된 개체에 대해 일반 종료자를 실행한 후 를 호출 ReleaseHandle 하고, 리소스가 호출하도록 보장하고 진행 중인 동안 중단되지 않도록 합니다. 이 메서드는 instance 생성 시 CER(제한된 실행 영역)으로 준비됩니다(정적으로 결정 가능한 호출 그래프의 모든 메서드와 함께). 이렇게 하면 스레드 중단 중단이 방지되지만 재정의된 ReleaseHandle 메서드에 오류 경로가 발생하지 않도록 주의해야 합니다. 특히 에서 ReleaseHandle호출하는 ReliabilityContractAttribute 모든 메서드에 특성을 적용합니다. 대부분의 경우 이 코드는 다음과 여야 합니다.

ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)

또한 간단한 정리(예: 파일 핸들에서 Windows API CloseHandle 호출)의 경우 단일 플랫폼 호출에 대한 반환 값을 검사 수 있습니다. 복잡한 정리의 경우 많은 프로그램 논리와 많은 메서드 호출이 있을 수 있으며, 그 중 일부는 실패할 수 있습니다. 프로그램 논리에 이러한 각 사례에 대한 대체 코드가 있는지 확인해야 합니다.

메서드가 ReleaseHandle 어떤 이유로든 를 반환 false 하면 releaseHandleFailed 관리 디버깅 도우미가 생성됩니다.

적용 대상

추가 정보