Monitor.Wait 메서드

정의

개체에 대한 잠금을 해제하고 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다.

오버로드

Name Description
Wait(Object, Int32, Boolean)

개체에 대한 잠금을 해제하고 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다. 지정된 제한 시간 간격이 경과하면 스레드가 준비 큐에 들어갑니다. 또한 이 메서드는 컨텍스트의 동기화 도메인(동기화된 컨텍스트에 있는 경우)이 대기 전에 종료되고 나중에 다시 액세스할지 여부를 지정합니다.

Wait(Object)

개체에 대한 잠금을 해제하고 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다.

Wait(Object, Int32)

개체에 대한 잠금을 해제하고 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다. 지정된 제한 시간 간격이 경과하면 스레드가 준비 큐에 들어갑니다.

Wait(Object, TimeSpan)

개체에 대한 잠금을 해제하고 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다. 지정된 제한 시간 간격이 경과하면 스레드가 준비 큐에 들어갑니다.

Wait(Object, TimeSpan, Boolean)

개체에 대한 잠금을 해제하고 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다. 지정된 제한 시간 간격이 경과하면 스레드가 준비 큐에 들어갑니다. 필요에 따라 대기 전에 동기화된 컨텍스트에 대한 동기화 도메인을 종료하고 나중에 도메인을 다시 가져옵니다.

Wait(Object, Int32, Boolean)

Source:
Monitor.cs
Source:
Monitor.cs
Source:
Monitor.cs
Source:
Monitor.cs
Source:
Monitor.cs

개체에 대한 잠금을 해제하고 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다. 지정된 제한 시간 간격이 경과하면 스레드가 준비 큐에 들어갑니다. 또한 이 메서드는 컨텍스트의 동기화 도메인(동기화된 컨텍스트에 있는 경우)이 대기 전에 종료되고 나중에 다시 액세스할지 여부를 지정합니다.

public:
 static bool Wait(System::Object ^ obj, int millisecondsTimeout, bool exitContext);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait(object obj, int millisecondsTimeout, bool exitContext);
public static bool Wait(object obj, int millisecondsTimeout, bool exitContext);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj * int * bool -> bool
static member Wait : obj * int * bool -> bool
Public Shared Function Wait (obj As Object, millisecondsTimeout As Integer, exitContext As Boolean) As Boolean

매개 변수

obj
Object

대기할 개체입니다.

millisecondsTimeout
Int32

스레드가 준비 큐에 들어가기 전에 대기할 시간(밀리초)입니다.

exitContext
Boolean

true대기하기 전에 컨텍스트(동기화된 컨텍스트에 있는 경우)에 대한 동기화 도메인을 종료하고 다시 가져옵니다. 그렇지 않으면 . false

반품

지정된 시간이 경과하기 전에 잠금을 다시 확인한 경우 지정된 시간이 경과한 후 잠금을 다시 가져오면 입니다. 잠금을 다시 가져올 때까지 메서드가 반환되지 않습니다.

특성

예외

매개 변수는 obj .입니다 null.

Wait 는 동기화된 코드 블록 내에서 호출되지 않습니다.

호출 Wait 하는 스레드는 나중에 대기 상태에서 중단됩니다. 이 문제는 다른 스레드가 이 스레드의 Interrupt() 메서드를 호출할 때 발생합니다.

매개 변수의 millisecondsTimeout 값이 음수이고 같 Infinite지 않습니다.

설명

Wait(Object, Int32, Boolean) 메서드

이 메서드는 매개 변수에 obj 대한 배타적 잠금을 다시 가져올 때까지 반환되지 않습니다.

현재 지정된 개체의 잠금을 소유하고 있는 스레드는 다른 스레드가 액세스할 수 있도록 개체를 해제하기 위해 이 메서드를 호출합니다. 잠금을 다시 요청하는 동안 호출자가 차단됩니다. 이 메서드는 호출자가 다른 스레드의 작업으로 인해 발생하는 상태 변경을 기다려야 할 때 호출됩니다.

제한 시간은 다른 스레드가 Pulse 또는 PulseAll 메서드를 호출하지 않고 잠금을 해제하는 경우 현재 스레드가 무기한 차단되지 않도록 합니다. 또한 스레드를 준비 큐로 이동하여 대기 큐에서 앞서 다른 스레드를 우회하여 잠금을 더 빨리 다시 가져올 수 있습니다. 스레드는 메서드의 Wait 반환 값을 테스트하여 제한 시간 전에 잠금을 다시 입력했는지 여부를 확인할 수 있습니다. 스레드는 대기를 발생시킨 조건을 평가하고 필요한 경우 메서드를 다시 호출할 Wait 수 있습니다.

스레드가 호출 Wait되면 잠금을 해제하고 대기 큐에 들어갑니다. 이 시점에서 준비 큐의 다음 스레드(있는 경우)가 잠금을 제어할 수 있습니다. 호출된 Wait 스레드는 잠금을 보유한 다른 스레드가 PulseAll을 호출하거나, 대기 중인 큐에서 다음 순서의 스레드가 되어 잠금을 보유한 스레드가 Pulse을 호출할 때까지 대기 큐에 남아 있습니다. 그러나 다른 스레드가 이 개체 millisecondsTimeout 또는 Pulse 메서드를 호출하기 전에 경과하면 PulseAll 잠금을 다시 가져오기 위해 원래 스레드가 준비 큐로 이동됩니다.

메모

매개 변수에 Infinite이 지정된 경우, 잠금의 소유자가 millisecondsTimeout 또는 Pulse을 호출하지 않는 한 이 메서드는 무기한 방해합니다. millisecondsTimeout가 0과 같으면 Wait를 호출하는 스레드가 잠금을 해제한 다음, 잠금을 다시 회복하기 위해 바로 준비 큐에 진입합니다.

지정된 객체에 대해 Wait이 호출된 횟수와 관계없이 호출자는 Enter을 한 번 실행합니다. 개념적으로 메서드는 Wait 호출자가 개체에서 호출한 Enter 횟수를 저장하고 잠긴 개체를 완전히 해제하는 데 필요한 횟수를 호출 Exit 합니다. 그런 다음 호출자는 개체를 다시 가져올 때까지 기다리는 동안 차단합니다. 호출자가 잠금을 재획득할 때, 시스템은 저장된 Enter 수를 복원하기 위해 필요한 횟수만큼 Enter를 호출합니다. 호출하면 Wait 지정된 개체에 대한 잠금만 해제됩니다. 호출자가 다른 개체에 대한 잠금의 소유자인 경우 이러한 잠금은 해제되지 않습니다.

메모

동기화된 개체에는 현재 잠금을 보유하고 있는 스레드에 대한 참조, 잠금을 가져올 준비가 된 스레드가 포함된 준비 큐에 대한 참조, 개체 상태 변경 알림을 기다리는 스레드가 포함된 대기 큐에 대한 참조 등 여러 참조가 있습니다.

Pulse, PulseAll, Wait 메서드는 동기화된 블록 내에서 호출되어야 합니다.

메서드 Pulse 에 대한 주석은 대기 중인 스레드가 없을 때 Pulse이 호출될 경우에 발생하는 일을 설명합니다.

Wait(Object, TimeSpan, Boolean) 메서드

이 메서드는 매개 변수에 obj 대한 배타적 잠금을 다시 가져올 때까지 반환되지 않습니다.

현재 지정된 개체의 잠금을 소유하고 있는 스레드는 다른 스레드가 액세스할 수 있도록 개체를 해제하기 위해 이 메서드를 호출합니다. 잠금을 다시 요청하는 동안 호출자가 차단됩니다. 이 메서드는 호출자가 다른 스레드의 작업으로 인해 발생하는 상태 변경을 기다려야 할 때 호출됩니다.

제한 시간은 다른 스레드가 Pulse 또는 PulseAll 메서드를 호출하지 않고 잠금을 해제하는 경우 현재 스레드가 무기한 차단되지 않도록 합니다. 또한 스레드를 준비 큐로 이동하여 대기 큐에서 앞서 다른 스레드를 우회하여 잠금을 더 빨리 다시 가져올 수 있습니다. 스레드는 메서드의 Wait 반환 값을 테스트하여 제한 시간 전에 잠금을 다시 입력했는지 여부를 확인할 수 있습니다. 스레드는 대기를 발생시킨 조건을 평가하고 필요한 경우 메서드를 다시 호출할 Wait 수 있습니다.

스레드가 호출 Wait되면 잠금을 해제하고 대기 큐에 들어갑니다. 이 시점에서 준비 큐의 다음 스레드(있는 경우)가 잠금을 제어할 수 있습니다. 호출된 Wait 스레드는 잠금을 보유한 다른 스레드가 PulseAll을 호출하거나, 대기 중인 큐에서 다음 순서의 스레드가 되어 잠금을 보유한 스레드가 Pulse을 호출할 때까지 대기 큐에 남아 있습니다. 그러나 다른 스레드가 이 개체 timeout 또는 Pulse 메서드를 호출하기 전에 밀리초가 경과하면 PulseAll 잠금을 다시 가져오기 위해 원래 스레드가 준비 큐로 이동됩니다.

메모

TimeSpan이(가) -1 밀리초로 지정된 timeout 매개 변수인 경우, 이 메서드는 잠금 소유자가 Pulse 또는 PulseAll을(를) 호출할 때까지 무기한 차단됩니다. 0밀리초인 경우 timeout 호출 Wait 하는 스레드는 잠금을 해제한 다음 잠금을 다시 회복하기 위해 즉시 준비 큐에 들어갑니다.

지정된 객체에 대해 Wait이 호출된 횟수와 관계없이 호출자는 Enter을 한 번 실행합니다. 개념적으로 메서드는 Wait 호출자가 개체에서 호출한 Enter 횟수를 저장하고 잠긴 개체를 완전히 해제하는 데 필요한 횟수를 호출 Exit 합니다. 그런 다음 호출자는 개체를 다시 가져올 때까지 기다리는 동안 차단합니다. 호출자가 잠금을 재획득할 때, 시스템은 저장된 Enter 수를 복원하기 위해 필요한 횟수만큼 Enter를 호출합니다. 호출하면 Wait 지정된 개체에 대한 잠금만 해제됩니다. 호출자가 다른 개체에 대한 잠금의 소유자인 경우 이러한 잠금은 해제되지 않습니다.

메모

동기화된 개체에는 현재 잠금을 보유하고 있는 스레드에 대한 참조, 잠금을 가져올 준비가 된 스레드가 포함된 준비 큐에 대한 참조, 개체 상태 변경 알림을 기다리는 스레드가 포함된 대기 큐에 대한 참조 등 여러 참조가 있습니다.

Pulse, PulseAll, Wait 메서드는 동기화된 블록 내에서 호출되어야 합니다.

메서드 Pulse 에 대한 주석은 대기 중인 스레드가 없을 때 Pulse이 호출될 경우에 발생하는 일을 설명합니다.

컨텍스트를 종료합니다

메서드가 exitContext 기본이 아닌 관리되는 컨텍스트 내에서 호출되지 않는 한 Wait 매개 변수는 효과가 없습니다. 이 문제는 스레드가 파생된 ContextBoundObject클래스의 인스턴스에 대한 호출 내에 있는 경우에 발생할 수 있습니다. 현재 ContextBoundObjectString에서 파생되지 않은 클래스의 메서드를 실행하고 있더라도, 현재 애플리케이션 도메인의 스택에 ContextBoundObject가 존재한다면 기본이 아닌 컨텍스트에 있을 수 있습니다.

코드가 기본이 아닌 컨텍스트에서 실행될 때, true에 대해 exitContext을 지정하면 스레드가 비 기본 관리 컨텍스트를 종료하고 기본 컨텍스트로 전환한 후 Wait 메서드를 실행하도록 합니다. 메서드 호출이 완료되면 기본이 아닌 원래 컨텍스트로 Wait 가 복귀합니다.

컨텍스트 바인딩된 클래스에 특성이 SynchronizationAttribute 적용된 경우에 유용할 수 있습니다. 이 경우 클래스의 멤버에 대한 모든 호출이 자동으로 동기화되고 동기화 도메인은 클래스의 전체 코드 본문입니다. 멤버의 호출 스택에서 코드가 Wait 메서드를 호출하고, true에 대해 exitContext을 지정하면 스레드는 동기화 도메인을 벗어나게 되고, 그 결과로 개체의 모든 멤버에 대한 호출에서 차단된 스레드는 계속 진행할 수 있습니다. 메서드가 Wait 반환되면 호출한 스레드가 동기화 도메인을 다시 입력하기 위해 기다려야 합니다.

추가 정보

적용 대상

Wait(Object)

Source:
Monitor.cs
Source:
Monitor.cs
Source:
Monitor.cs
Source:
Monitor.cs
Source:
Monitor.cs

개체에 대한 잠금을 해제하고 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다.

public:
 static bool Wait(System::Object ^ obj);
public static bool Wait(object obj);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait(object obj);
static member Wait : obj -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj -> bool
Public Shared Function Wait (obj As Object) As Boolean

매개 변수

obj
Object

대기할 개체입니다.

반품

호출자가 지정된 개체에 대한 잠금을 다시 요청했기 때문에 호출이 반환되면 입니다. 잠금을 다시 가져오지 않으면 이 메서드가 반환되지 않습니다.

특성

예외

매개 변수는 obj .입니다 null.

호출 스레드는 지정된 개체에 대한 잠금을 소유하지 않습니다.

호출 Wait 하는 스레드는 나중에 대기 상태에서 중단됩니다. 이 문제는 다른 스레드가 이 스레드의 Interrupt() 메서드를 호출할 때 발생합니다.

설명

현재 지정된 개체의 잠금을 소유하고 있는 스레드는 다른 스레드가 액세스할 수 있도록 개체를 해제하기 위해 이 메서드를 호출합니다. 잠금을 다시 요청하는 동안 호출자가 차단됩니다. 이 메서드는 호출자가 다른 스레드의 작업으로 인해 발생하는 상태 변경을 기다려야 할 때 호출됩니다.

스레드가 호출 Wait되면 개체에 대한 잠금을 해제하고 개체의 대기 큐에 들어갑니다. 개체의 준비 큐에 있는 다음 스레드(있는 경우)는 잠금을 획득하고 개체를 단독으로 사용합니다. 호출 Wait 하는 모든 스레드는 잠금 소유자가 보낸 신호를 Pulse 받거나 PulseAll보낼 때까지 대기 중인 큐에 남아 있습니다. 전송되는 경우 Pulse 대기 중인 큐의 헤드에 있는 스레드만 영향을 받습니다. 전송되는 경우 PulseAll 개체를 기다리는 모든 스레드가 영향을 받습니다. 신호가 수신되면 하나 이상의 스레드가 대기 중인 큐를 떠나 준비 큐를 입력합니다. 준비 큐의 스레드는 잠금을 다시 가져올 수 있습니다.

이 메서드는 호출 스레드가 개체에 대한 잠금을 다시 가져올 때 반환됩니다. 이 메서드는 잠금 소유자가 호출 PulsePulseAll하지 않거나 호출하지 않으면 무기한 차단됩니다.

지정된 객체에 대해 Wait이 호출된 횟수와 관계없이 호출자는 Enter을 한 번 실행합니다. 개념적으로 메서드는 Wait 호출자가 개체에서 호출한 Enter 횟수를 저장하고 잠긴 개체를 완전히 해제하는 데 필요한 횟수를 호출 Exit 합니다. 그런 다음 호출자는 개체를 다시 가져올 때까지 기다리는 동안 차단합니다. 호출자가 잠금을 재획득할 때, 시스템은 저장된 Enter 수를 복원하기 위해 필요한 횟수만큼 Enter를 호출합니다. 호출하면 Wait 지정된 개체에 대한 잠금만 해제됩니다. 호출자가 다른 개체에 대한 잠금의 소유자인 경우 이러한 잠금은 해제되지 않습니다.

동기화된 개체에는 현재 잠금을 보유하고 있는 스레드에 대한 참조, 잠금을 가져올 준비가 된 스레드가 포함된 준비 큐에 대한 참조, 개체 상태 변경 알림을 기다리는 스레드가 포함된 대기 큐에 대한 참조 등 여러 참조가 있습니다.

Pulse, PulseAll, Wait 메서드는 동기화된 블록 내에서 호출되어야 합니다.

메서드 Pulse 에 대한 주석은 대기 중인 스레드가 없을 때 Pulse이 호출될 경우에 발생하는 일을 설명합니다.

추가 정보

적용 대상

Wait(Object, Int32)

Source:
Monitor.CoreCLR.cs
Source:
Monitor.cs
Source:
Monitor.CoreCLR.cs
Source:
Monitor.CoreCLR.cs
Source:
Monitor.CoreCLR.cs

개체에 대한 잠금을 해제하고 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다. 지정된 제한 시간 간격이 경과하면 스레드가 준비 큐에 들어갑니다.

public:
 static bool Wait(System::Object ^ obj, int millisecondsTimeout);
public static bool Wait(object obj, int millisecondsTimeout);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait(object obj, int millisecondsTimeout);
static member Wait : obj * int -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj * int -> bool
Public Shared Function Wait (obj As Object, millisecondsTimeout As Integer) As Boolean

매개 변수

obj
Object

대기할 개체입니다.

millisecondsTimeout
Int32

스레드가 준비 큐에 들어가기 전에 대기할 시간(밀리초)입니다.

반품

지정된 시간이 경과하기 전에 잠금을 다시 확인한 경우 지정된 시간이 경과한 후 잠금을 다시 가져오면 입니다. 잠금을 다시 가져올 때까지 메서드가 반환되지 않습니다.

특성

예외

매개 변수는 obj .입니다 null.

호출 스레드는 지정된 개체에 대한 잠금을 소유하지 않습니다.

호출 Wait 하는 스레드는 나중에 대기 상태에서 중단됩니다. 이 문제는 다른 스레드가 이 스레드의 Interrupt() 메서드를 호출할 때 발생합니다.

매개 변수의 millisecondsTimeout 값이 음수이고 같 Infinite지 않습니다.

설명

이 메서드는 매개 변수에 obj 대한 배타적 잠금을 다시 가져올 때까지 반환되지 않습니다.

현재 지정된 개체의 잠금을 소유하고 있는 스레드는 다른 스레드가 액세스할 수 있도록 개체를 해제하기 위해 이 메서드를 호출합니다. 잠금을 다시 요청하는 동안 호출자가 차단됩니다. 이 메서드는 호출자가 다른 스레드의 작업으로 인해 발생하는 상태 변경을 기다려야 할 때 호출됩니다.

제한 시간은 다른 스레드가 Pulse 또는 PulseAll 메서드를 호출하지 않고 잠금을 해제하는 경우 현재 스레드가 무기한 차단되지 않도록 합니다. 또한 스레드를 준비 큐로 이동하여 대기 큐에서 앞서 다른 스레드를 우회하여 잠금을 더 빨리 다시 가져올 수 있습니다. 스레드는 메서드의 Wait 반환 값을 테스트하여 제한 시간 전에 잠금을 다시 입력했는지 여부를 확인할 수 있습니다. 스레드는 대기를 발생시킨 조건을 평가하고 필요한 경우 메서드를 다시 호출할 Wait 수 있습니다.

스레드가 호출 Wait되면 개체에 대한 잠금을 해제하고 개체의 대기 큐에 들어갑니다. 개체의 준비 큐에 있는 다음 스레드(있는 경우)는 잠금을 획득하고 개체를 단독으로 사용합니다. 호출된 Wait 스레드는 잠금을 보유한 다른 스레드가 PulseAll을 호출하거나, 대기 중인 큐에서 다음 순서의 스레드가 되어 잠금을 보유한 스레드가 Pulse을 호출할 때까지 대기 큐에 남아 있습니다. 그러나 다른 스레드가 이 개체 millisecondsTimeout 또는 Pulse 메서드를 호출하기 전에 경과하면 PulseAll 잠금을 다시 가져오기 위해 원래 스레드가 준비 큐로 이동됩니다.

메모

매개 변수에 Infinite이 지정된 경우, 잠금의 소유자가 millisecondsTimeout 또는 Pulse을 호출하지 않는 한 이 메서드는 무기한 방해합니다. millisecondsTimeout가 0과 같으면 Wait를 호출하는 스레드가 잠금을 해제한 다음, 잠금을 다시 회복하기 위해 바로 준비 큐에 진입합니다.

지정된 객체에 대해 Wait이 호출된 횟수와 관계없이 호출자는 Enter을 한 번 실행합니다. 개념적으로 메서드는 Wait 호출자가 개체에서 호출한 Enter 횟수를 저장하고 잠긴 개체를 완전히 해제하는 데 필요한 횟수를 호출 Exit 합니다. 그런 다음 호출자는 개체를 다시 가져올 때까지 기다리는 동안 차단합니다. 호출자가 잠금을 재획득할 때, 시스템은 저장된 Enter 수를 복원하기 위해 필요한 횟수만큼 Enter를 호출합니다. 호출하면 Wait 지정된 개체에 대한 잠금만 해제됩니다. 호출자가 다른 개체에 대한 잠금의 소유자인 경우 이러한 잠금은 해제되지 않습니다.

메모

동기화된 개체에는 현재 잠금을 보유하고 있는 스레드에 대한 참조, 잠금을 가져올 준비가 된 스레드가 포함된 준비 큐에 대한 참조, 개체 상태 변경 알림을 기다리는 스레드가 포함된 대기 큐에 대한 참조 등 여러 참조가 있습니다.

Pulse, PulseAll, Wait 메서드는 동기화된 블록 내에서 호출되어야 합니다.

메서드 Pulse 에 대한 주석은 대기 중인 스레드가 없을 때 Pulse이 호출될 경우에 발생하는 일을 설명합니다.

추가 정보

적용 대상

Wait(Object, TimeSpan)

Source:
Monitor.cs
Source:
Monitor.cs
Source:
Monitor.cs
Source:
Monitor.cs
Source:
Monitor.cs

개체에 대한 잠금을 해제하고 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다. 지정된 제한 시간 간격이 경과하면 스레드가 준비 큐에 들어갑니다.

public:
 static bool Wait(System::Object ^ obj, TimeSpan timeout);
public static bool Wait(object obj, TimeSpan timeout);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait(object obj, TimeSpan timeout);
static member Wait : obj * TimeSpan -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj * TimeSpan -> bool
Public Shared Function Wait (obj As Object, timeout As TimeSpan) As Boolean

매개 변수

obj
Object

대기할 개체입니다.

timeout
TimeSpan

TimeSpan 스레드가 준비 큐에 들어가기 전에 대기할 시간을 나타내는 값입니다.

반품

지정된 시간이 경과하기 전에 잠금을 다시 확인한 경우 지정된 시간이 경과한 후 잠금을 다시 가져오면 입니다. 잠금을 다시 가져올 때까지 메서드가 반환되지 않습니다.

특성

예외

매개 변수는 obj .입니다 null.

호출 스레드는 지정된 개체에 대한 잠금을 소유하지 않습니다.

호출 Wait 하는 스레드는 나중에 대기 상태에서 중단됩니다. 이 문제는 다른 스레드가 이 스레드의 Interrupt() 메서드를 호출할 때 발생합니다.

매개 변수 값timeout(밀리초)이 음수이고(밀리초-1) Infinite보다 크지 않습니다.

설명

이 메서드는 매개 변수에 obj 대한 배타적 잠금을 다시 가져올 때까지 반환되지 않습니다.

현재 지정된 개체의 잠금을 소유하고 있는 스레드는 다른 스레드가 액세스할 수 있도록 개체를 해제하기 위해 이 메서드를 호출합니다. 잠금을 다시 요청하는 동안 호출자가 차단됩니다. 이 메서드는 호출자가 다른 스레드의 작업으로 인해 발생하는 상태 변경을 기다려야 할 때 호출됩니다.

제한 시간은 다른 스레드가 Pulse 또는 PulseAll 메서드를 호출하지 않고 잠금을 해제하는 경우 현재 스레드가 무기한 차단되지 않도록 합니다. 또한 스레드를 준비 큐로 이동하여 대기 큐에서 앞서 다른 스레드를 우회하여 잠금을 더 빨리 다시 가져올 수 있습니다. 스레드는 메서드의 Wait 반환 값을 테스트하여 제한 시간 전에 잠금을 다시 입력했는지 여부를 확인할 수 있습니다. 스레드는 대기를 발생시킨 조건을 평가하고 필요한 경우 메서드를 다시 호출할 Wait 수 있습니다.

스레드가 호출 Wait되면 개체에 대한 잠금을 해제하고 개체의 대기 큐에 들어갑니다. 개체의 준비 큐에 있는 다음 스레드(있는 경우)는 잠금을 획득하고 개체를 단독으로 사용합니다. 호출된 Wait 스레드는 잠금을 보유한 다른 스레드가 PulseAll을 호출하거나, 대기 중인 큐에서 다음 순서의 스레드가 되어 잠금을 보유한 스레드가 Pulse을 호출할 때까지 대기 큐에 남아 있습니다. 그러나 다른 스레드가 이 개체 timeout 또는 Pulse 메서드를 호출하기 전에 경과하면 PulseAll 잠금을 다시 가져오기 위해 원래 스레드가 준비 큐로 이동됩니다.

메모

TimeSpan이(가) -1 밀리초로 지정된 timeout 매개 변수인 경우, 이 메서드는 잠금 소유자가 Pulse 또는 PulseAll을(를) 호출할 때까지 무기한 차단됩니다. 0밀리초인 경우 timeout 호출 Wait 하는 스레드는 잠금을 해제한 다음 잠금을 다시 회복하기 위해 즉시 준비 큐에 들어갑니다.

지정된 객체에 대해 Wait이 호출된 횟수와 관계없이 호출자는 Enter을 한 번 실행합니다. 개념적으로 메서드는 Wait 호출자가 개체에서 호출한 Enter 횟수를 저장하고 잠긴 개체를 완전히 해제하는 데 필요한 횟수를 호출 Exit 합니다. 그런 다음 호출자는 개체를 다시 가져올 때까지 기다리는 동안 차단합니다. 호출자가 잠금을 재획득할 때, 시스템은 저장된 Enter 수를 복원하기 위해 필요한 횟수만큼 Enter를 호출합니다. 호출하면 Wait 지정된 개체에 대한 잠금만 해제됩니다. 호출자가 다른 개체에 대한 잠금의 소유자인 경우 이러한 잠금은 해제되지 않습니다.

메모

동기화된 개체에는 현재 잠금을 보유하고 있는 스레드에 대한 참조, 잠금을 가져올 준비가 된 스레드가 포함된 준비 큐에 대한 참조, 개체 상태 변경 알림을 기다리는 스레드가 포함된 대기 큐에 대한 참조 등 여러 참조가 있습니다.

Pulse, PulseAll, Wait 메서드는 동기화된 블록 내에서 호출되어야 합니다.

메서드 Pulse 에 대한 주석은 대기 중인 스레드가 없을 때 Pulse이 호출될 경우에 발생하는 일을 설명합니다.

추가 정보

적용 대상

Wait(Object, TimeSpan, Boolean)

Source:
Monitor.cs
Source:
Monitor.cs
Source:
Monitor.cs
Source:
Monitor.cs
Source:
Monitor.cs

개체에 대한 잠금을 해제하고 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다. 지정된 제한 시간 간격이 경과하면 스레드가 준비 큐에 들어갑니다. 필요에 따라 대기 전에 동기화된 컨텍스트에 대한 동기화 도메인을 종료하고 나중에 도메인을 다시 가져옵니다.

public:
 static bool Wait(System::Object ^ obj, TimeSpan timeout, bool exitContext);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait(object obj, TimeSpan timeout, bool exitContext);
public static bool Wait(object obj, TimeSpan timeout, bool exitContext);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj * TimeSpan * bool -> bool
static member Wait : obj * TimeSpan * bool -> bool
Public Shared Function Wait (obj As Object, timeout As TimeSpan, exitContext As Boolean) As Boolean

매개 변수

obj
Object

대기할 개체입니다.

timeout
TimeSpan

TimeSpan 스레드가 준비 큐에 들어가기 전에 대기할 시간을 나타내는 값입니다.

exitContext
Boolean

true대기하기 전에 컨텍스트(동기화된 컨텍스트에 있는 경우)에 대한 동기화 도메인을 종료하고 다시 가져옵니다. 그렇지 않으면 . false

반품

지정된 시간이 경과하기 전에 잠금을 다시 확인한 경우 지정된 시간이 경과한 후 잠금을 다시 가져오면 입니다. 잠금을 다시 가져올 때까지 메서드가 반환되지 않습니다.

특성

예외

매개 변수는 obj .입니다 null.

Wait 는 동기화된 코드 블록 내에서 호출되지 않습니다.

대기를 호출하는 스레드는 나중에 대기 상태에서 중단됩니다. 이 문제는 다른 스레드가 이 스레드의 Interrupt() 메서드를 호출할 때 발생합니다.

매개 변수가 timeout 음수이고(밀리초-1) 나타내 Infinite 지 않거나 Int32.MaxValue보다 큰 경우

설명

Wait(Object, Int32, Boolean) 메서드

이 메서드는 매개 변수에 obj 대한 배타적 잠금을 다시 가져올 때까지 반환되지 않습니다.

현재 지정된 개체의 잠금을 소유하고 있는 스레드는 다른 스레드가 액세스할 수 있도록 개체를 해제하기 위해 이 메서드를 호출합니다. 잠금을 다시 요청하는 동안 호출자가 차단됩니다. 이 메서드는 호출자가 다른 스레드의 작업으로 인해 발생하는 상태 변경을 기다려야 할 때 호출됩니다.

제한 시간은 다른 스레드가 Pulse 또는 PulseAll 메서드를 호출하지 않고 잠금을 해제하는 경우 현재 스레드가 무기한 차단되지 않도록 합니다. 또한 스레드를 준비 큐로 이동하여 대기 큐에서 앞서 다른 스레드를 우회하여 잠금을 더 빨리 다시 가져올 수 있습니다. 스레드는 메서드의 Wait 반환 값을 테스트하여 제한 시간 전에 잠금을 다시 입력했는지 여부를 확인할 수 있습니다. 스레드는 대기를 발생시킨 조건을 평가하고 필요한 경우 메서드를 다시 호출할 Wait 수 있습니다.

스레드가 호출 Wait되면 잠금을 해제하고 대기 큐에 들어갑니다. 이 시점에서 준비 큐의 다음 스레드(있는 경우)가 잠금을 제어할 수 있습니다. 호출된 Wait 스레드는 잠금을 보유한 다른 스레드가 PulseAll을 호출하거나, 대기 중인 큐에서 다음 순서의 스레드가 되어 잠금을 보유한 스레드가 Pulse을 호출할 때까지 대기 큐에 남아 있습니다. 그러나 다른 스레드가 이 개체 millisecondsTimeout 또는 Pulse 메서드를 호출하기 전에 경과하면 PulseAll 잠금을 다시 가져오기 위해 원래 스레드가 준비 큐로 이동됩니다.

메모

매개 변수에 Infinite이 지정된 경우, 잠금의 소유자가 millisecondsTimeout 또는 Pulse을 호출하지 않는 한 이 메서드는 무기한 방해합니다. millisecondsTimeout가 0과 같으면 Wait를 호출하는 스레드가 잠금을 해제한 다음, 잠금을 다시 회복하기 위해 바로 준비 큐에 진입합니다.

지정된 객체에 대해 Wait이 호출된 횟수와 관계없이 호출자는 Enter을 한 번 실행합니다. 개념적으로 메서드는 Wait 호출자가 개체에서 호출한 Enter 횟수를 저장하고 잠긴 개체를 완전히 해제하는 데 필요한 횟수를 호출 Exit 합니다. 그런 다음 호출자는 개체를 다시 가져올 때까지 기다리는 동안 차단합니다. 호출자가 잠금을 재획득할 때, 시스템은 저장된 Enter 수를 복원하기 위해 필요한 횟수만큼 Enter를 호출합니다. 호출하면 Wait 지정된 개체에 대한 잠금만 해제됩니다. 호출자가 다른 개체에 대한 잠금의 소유자인 경우 이러한 잠금은 해제되지 않습니다.

메모

동기화된 개체에는 현재 잠금을 보유하고 있는 스레드에 대한 참조, 잠금을 가져올 준비가 된 스레드가 포함된 준비 큐에 대한 참조, 개체 상태 변경 알림을 기다리는 스레드가 포함된 대기 큐에 대한 참조 등 여러 참조가 있습니다.

Pulse, PulseAll, Wait 메서드는 동기화된 블록 내에서 호출되어야 합니다.

메서드 Pulse 에 대한 주석은 대기 중인 스레드가 없을 때 Pulse이 호출될 경우에 발생하는 일을 설명합니다.

Wait(Object, TimeSpan, Boolean) 메서드

이 메서드는 매개 변수에 obj 대한 배타적 잠금을 다시 가져올 때까지 반환되지 않습니다.

현재 지정된 개체의 잠금을 소유하고 있는 스레드는 다른 스레드가 액세스할 수 있도록 개체를 해제하기 위해 이 메서드를 호출합니다. 잠금을 다시 요청하는 동안 호출자가 차단됩니다. 이 메서드는 호출자가 다른 스레드의 작업으로 인해 발생하는 상태 변경을 기다려야 할 때 호출됩니다.

제한 시간은 다른 스레드가 Pulse 또는 PulseAll 메서드를 호출하지 않고 잠금을 해제하는 경우 현재 스레드가 무기한 차단되지 않도록 합니다. 또한 스레드를 준비 큐로 이동하여 대기 큐에서 앞서 다른 스레드를 우회하여 잠금을 더 빨리 다시 가져올 수 있습니다. 스레드는 메서드의 Wait 반환 값을 테스트하여 제한 시간 전에 잠금을 다시 입력했는지 여부를 확인할 수 있습니다. 스레드는 대기를 발생시킨 조건을 평가하고 필요한 경우 메서드를 다시 호출할 Wait 수 있습니다.

스레드가 호출 Wait되면 잠금을 해제하고 대기 큐에 들어갑니다. 이 시점에서 준비 큐의 다음 스레드(있는 경우)가 잠금을 제어할 수 있습니다. 호출된 Wait 스레드는 잠금을 보유한 다른 스레드가 PulseAll을 호출하거나, 대기 중인 큐에서 다음 순서의 스레드가 되어 잠금을 보유한 스레드가 Pulse을 호출할 때까지 대기 큐에 남아 있습니다. 그러나 다른 스레드가 이 개체 timeout 또는 Pulse 메서드를 호출하기 전에 밀리초가 경과하면 PulseAll 잠금을 다시 가져오기 위해 원래 스레드가 준비 큐로 이동됩니다.

메모

TimeSpan이(가) -1 밀리초로 지정된 timeout 매개 변수인 경우, 이 메서드는 잠금 소유자가 Pulse 또는 PulseAll을(를) 호출할 때까지 무기한 차단됩니다. 0밀리초인 경우 timeout 호출 Wait 하는 스레드는 잠금을 해제한 다음 잠금을 다시 회복하기 위해 즉시 준비 큐에 들어갑니다.

지정된 객체에 대해 Wait이 호출된 횟수와 관계없이 호출자는 Enter을 한 번 실행합니다. 개념적으로 메서드는 Wait 호출자가 개체에서 호출한 Enter 횟수를 저장하고 잠긴 개체를 완전히 해제하는 데 필요한 횟수를 호출 Exit 합니다. 그런 다음 호출자는 개체를 다시 가져올 때까지 기다리는 동안 차단합니다. 호출자가 잠금을 재획득할 때, 시스템은 저장된 Enter 수를 복원하기 위해 필요한 횟수만큼 Enter를 호출합니다. 호출하면 Wait 지정된 개체에 대한 잠금만 해제됩니다. 호출자가 다른 개체에 대한 잠금의 소유자인 경우 이러한 잠금은 해제되지 않습니다.

메모

동기화된 개체에는 현재 잠금을 보유하고 있는 스레드에 대한 참조, 잠금을 가져올 준비가 된 스레드가 포함된 준비 큐에 대한 참조, 개체 상태 변경 알림을 기다리는 스레드가 포함된 대기 큐에 대한 참조 등 여러 참조가 있습니다.

Pulse, PulseAll, Wait 메서드는 동기화된 블록 내에서 호출되어야 합니다.

메서드 Pulse 에 대한 주석은 대기 중인 스레드가 없을 때 Pulse이 호출될 경우에 발생하는 일을 설명합니다.

컨텍스트를 종료합니다

메서드가 exitContext 기본이 아닌 관리되는 컨텍스트 내에서 호출되지 않는 한 Wait 매개 변수는 효과가 없습니다. 이 문제는 스레드가 파생된 ContextBoundObject클래스의 인스턴스에 대한 호출 내에 있는 경우에 발생할 수 있습니다. 현재 ContextBoundObjectString에서 파생되지 않은 클래스의 메서드를 실행하고 있더라도, 현재 애플리케이션 도메인의 스택에 ContextBoundObject가 존재한다면 기본이 아닌 컨텍스트에 있을 수 있습니다.

코드가 기본이 아닌 컨텍스트에서 실행될 때, true에 대해 exitContext을 지정하면 스레드가 비 기본 관리 컨텍스트를 종료하고 기본 컨텍스트로 전환한 후 Wait 메서드를 실행하도록 합니다. 메서드 호출이 완료되면 기본이 아닌 원래 컨텍스트로 Wait 가 복귀합니다.

컨텍스트 바인딩된 클래스에 특성이 SynchronizationAttribute 적용된 경우에 유용할 수 있습니다. 이 경우 클래스의 멤버에 대한 모든 호출이 자동으로 동기화되고 동기화 도메인은 클래스의 전체 코드 본문입니다. 멤버의 호출 스택에서 코드가 Wait 메서드를 호출하고, true에 대해 exitContext을 지정하면 스레드는 동기화 도메인을 벗어나게 되고, 그 결과로 개체의 모든 멤버에 대한 호출에서 차단된 스레드는 계속 진행할 수 있습니다. 메서드가 Wait 반환되면 호출한 스레드가 동기화 도메인을 다시 입력하기 위해 기다려야 합니다.

추가 정보

적용 대상