CriticalHandle.ReleaseHandle 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
파생 클래스에서 재정의된 경우 핸들을 해제하는 데 필요한 코드를 실행합니다.
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 하고 리소스가 호출하도록 보장하고 진행 중인 동안 중단되지 않도록 합니다. 이 메서드는 인스턴스 생성 시 CER(제한된 실행 영역)으로 준비됩니다(정적으로 결정 가능한 호출 그래프의 모든 메서드와 함께). 이렇게 하면 스레드 중단 인터럽트가 발생하지 않지만 재정의된 ReleaseHandle 메서드에 오류 경로가 발생하지 않도록 주의해야 합니다. 특히 에서 호출ReleaseHandle하는 ReliabilityContractAttribute 모든 메서드에 특성을 적용합니다. 대부분의 경우 이 코드는 다음이어야 합니다.
ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)
또한 간단한 정리(예: 파일 핸들에서 Windows API CloseHandle
호출)의 경우 단일 플랫폼 호출에 대한 반환 값을 확인할 수 있습니다. 복잡한 정리의 경우 프로그램 논리와 많은 메서드 호출이 있을 수 있으며, 그 중 일부는 실패할 수 있습니다. 프로그램 논리에 이러한 각 사례에 대한 대체 코드가 있는지 확인해야 합니다.
메서드가 ReleaseHandle 어떤 이유로든 반환 false
되면 releaseHandleFailed 관리 디버깅 도우미를 생성합니다.
적용 대상
추가 정보
.NET