대기 핸들
업데이트: 2007년 11월
WaitHandle 클래스는 Win32 동기화 핸들을 캡슐화하며 여러 대기 작업을 허용하는 런타임에서 모든 동기화 개체를 나타내는 데 사용됩니다. 다른 동기화 개체와 대기 핸들을 비교하려면 동기화 기본 형식 개요를 참조하십시오.
WaitHandle 클래스는 추상 클래스입니다. 여기에는 파생 클래스 이외에도 다중 이벤트에서 대기할 수 있게 하는 정적 메서드가 많이 있습니다. WaitHandle에서 파생된 클래스는 다음을 포함합니다.
EventWaitHandle 클래스와 해당 파생 클래스인 AutoResetEvent 및 ManualResetEvent입니다. EventWaitHandle 클래스는 .NET Framework 버전 2.0에서 새로 도입되었습니다. EventWaitHandle, AutoResetEvent 및 ManualResetEvent를 참조하십시오.
Semaphore 클래스는 .NET Framework 버전 2.0에서 새로 도입되었습니다. 세마포를 참조하십시오.
WaitHandle 클래스는 MarshalByRefObject에서 파생되므로 이러한 클래스를 사용하여 응용 프로그램 도메인 경계에 걸쳐 스레드 작업을 동기화할 수 있습니다.
스레드는 인스턴스 메서드 WaitOne을 호출하여 개별 대기 핸들에서 차단될 수 있습니다. 또한 WaitHandle 클래스는 지정된 모든 대기 핸들 집합이 신호를 받을 때까지(WaitAll) 또는 지정된 대기 핸들 집합 중 하나가 신호를 받을 때까지(WaitAny) 대기하도록 정적 메서드를 오버로드합니다. 이러한 메서드의 오버로드는 대기를 포기하는 시간 제한 간격과 대기에 들어가기 전에 동기화 컨텍스트를 종료하는 기회를 제공하여 다른 스레드가 해당 동기화 컨텍스트를 사용할 수 있도록 합니다.
.NET Framework 버전 2.0에서는 대기 핸들에도 원자 연산으로 정적 SignalAndWait 메서드가 있어서 스레드가 하나의 대기 핸들 신호를 보내고 즉시 다른 대기 핸들에서 대기할 수 있습니다.
WaitHandle의 파생 클래스는 스레드 선호도가 다릅니다. 이벤트 대기 핸들(EventWaitHandle, AutoResetEvent 및 ManualResetEvent)과 세마포에는 스레드 선호도가 없습니다. 모든 스레드는 이벤트 대기 핸들이나 세마포의 신호를 보낼 수 있습니다. 반면 뮤텍스에는 스레드 선호도가 있습니다. 뮤텍스를 소유하는 스레드는 스레드 선호도를 해제해야 합니다. 스레드가 소유하지 않은 뮤텍스에서 ReleaseMutex 메서드를 호출하면 예외가 throw됩니다.