Monitor.Wait メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。
オーバーロード
Wait(Object, Int32, Boolean) |
オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。 指定されたタイムアウト期限を過ぎると、スレッドは実行待ちキューに入ります。 このメソッドは、コンテキストの同期ドメイン (同期されたコンテキストの場合) が待機の前に終了し、後で再取得されるかどうかも指定します。 |
Wait(Object) |
オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。 |
Wait(Object, Int32) |
オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。 指定されたタイムアウト期限を過ぎると、スレッドは実行待ちキューに入ります。 |
Wait(Object, TimeSpan) |
オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。 指定されたタイムアウト期限を過ぎると、スレッドは実行待ちキューに入ります。 |
Wait(Object, TimeSpan, Boolean) |
オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。 指定されたタイムアウト期限を過ぎると、スレッドは実行待ちキューに入ります。 または、待機の前に同期化されたコンテキストの同期ドメインを終了し、ドメインを後で再取得します。 |
Wait(Object, Int32, Boolean)
オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。 指定されたタイムアウト期限を過ぎると、スレッドは実行待ちキューに入ります。 このメソッドは、コンテキストの同期ドメイン (同期されたコンテキストの場合) が待機の前に終了し、後で再取得されるかどうかも指定します。
public:
static bool Wait(System::Object ^ obj, int millisecondsTimeout, bool exitContext);
public static bool Wait (object obj, int millisecondsTimeout, bool exitContext);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait (object obj, int millisecondsTimeout, bool exitContext);
static member Wait : obj * int * bool -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
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
。
戻り値
指定した時間が経過する前にロックが再取得された場合は true
。指定した時間が経過した後にロックが再取得された場合は false
。 このメソッドは、ロックが再取得されるまで制御を戻しません。
- 属性
例外
obj
パラメーターが null
です。
Wait
は、同期されたコード ブロック内からは呼び出されません。
Wait
を呼び出したスレッドは、後で待機中の状態を中断されます。 これは、他のスレッドがこのスレッドの Interrupt() メソッドを呼び出すときに起こります。
millisecondsTimeout
パラメーターの値が負で、Infinite と等しくありません。
注釈
このメソッドは、 パラメーターの排他ロックを再取得するまで戻 obj
りません。
指定されたオブジェクトのロックを現在所有しているスレッドは、別のスレッドがアクセスできるようにオブジェクトを解放するために、このメソッドを呼び出します。 ロックの再取得を待機している間、呼び出し元はブロックされます。 このメソッドは、呼び出し元が別のスレッドの操作の結果として発生する状態変更を待機する必要がある場合に呼び出されます。
タイムアウトにより、別のスレッドが最初に または PulseAll メソッドを呼び出さずにロックを解放した場合に、現在のスレッドが無期限にPulseブロックされないようにします。 また、スレッドを準備完了キューに移動し、待機キューの前にある他のスレッドをバイパスして、ロックをより早く再取得できるようにします。 スレッドは、 メソッドの戻り値を Wait テストして、タイムアウト前にロックを再取得したかどうかを判断できます。スレッドは待機に入る原因となった条件を評価し、必要に応じて メソッドを Wait 再度呼び出すことができます。
スレッドが を呼び出 Wait
すと、ロックが解放され、待機キューに入ります。 この時点で、準備完了キュー内の次のスレッド (存在する場合) はロックを制御できます。 呼び出された Wait
スレッドは、ロックを保持するスレッドが を呼び出すか、キュー内の次のスレッドであり、ロックを保持しているスレッドが を呼 PulseAllび出すまで待機キューに残ります Pulse。 ただし、別のスレッドがこのオブジェクトPulseまたはPulseAllメソッドを呼び出す前に が経過するとmillisecondsTimeout
、ロックを回復するために、元のスレッドが準備完了キューに移動されます。
Note
パラメーターに millisecondsTimeout
が指定されている場合Infinite、ロックの所有者が または PulseAllを呼び出Pulseさない限り、このメソッドは無期限にブロックされます。 が 0 の場合 millisecondsTimeout
、 を呼び出す Wait
スレッドはロックを解放し、ロックを取り戻すためにすぐに準備完了キューに入ります。
呼び出し元は、指定したオブジェクトに対して呼び出された回数Enterに関係なく、1 回実行Wait
されます。 概念的には、 メソッドは Wait
オブジェクトに対して呼び出された呼び出 Enter し元の回数を格納し、ロックされたオブジェクトを完全に解放するために必要な回数だけ呼び出 Exit します。 呼び出し元は、オブジェクトの再取得を待機している間にブロックします。 呼び出し元がロックを再取得すると、システムは呼び出し元の保存されたEnter数を復元するために必要な回数だけを呼び出Enterします。 を呼び出すと Wait
、指定したオブジェクトのロックのみが解放されます。呼び出し元が他のオブジェクトのロックの所有者である場合、これらのロックは解放されません。
Note
同期されたオブジェクトは、ロックを現在保持しているスレッドへの参照、ロックを取得する準備ができているスレッドを含む準備完了キューへの参照、待機キューへの参照など、いくつかの参照を保持します。これには、オブジェクトの状態の変更の通知を待機しているスレッドが含まれます。
PulseAll、、および Wait
メソッドはPulse、同期されたコード ブロック内から呼び出す必要があります。
メソッドの Pulse 解説では、スレッドが待機していないときに が呼び出された場合 Pulse の動作について説明します。
コンテキストの終了に関する注意事項
既定以外のexitContext
マネージド コンテキスト内から メソッドが Wait 呼び出されない限り、 パラメーターは無効です。 これは、スレッドが から ContextBoundObject派生したクラスのインスタンスの呼び出し内にある場合に発生する可能性があります。 などString、 からContextBoundObject派生していないクラスでメソッドを現在実行している場合でも、 が現在のアプリケーション ドメインのスタック上にある場合ContextBoundObjectは、既定以外のコンテキストに置くことができます。
コードが既定以外のコンテキストで実行されている場合、 をtrue
exitContext
指定すると、 メソッドを実行する前に、既定以外のマネージド コンテキスト (つまり、既定のコンテキストに遷移する) がスレッドによって終了しますWait。 メソッドの呼び出しが完了すると、既定以外の元のコンテキストに Wait 戻ります。
これは、コンテキスト バインド クラスに 属性が適用されている場合に SynchronizationAttribute 便利です。 その場合、クラスのメンバーに対するすべての呼び出しが自動的に同期され、同期ドメインはクラスのコード全体です。 メンバーの呼び出し履歴内のコードが メソッドをWait呼び出し、 に をexitContext
指定true
すると、スレッドは同期ドメインを終了し、オブジェクトの任意のメンバーへの呼び出しでブロックされたスレッドを続行できます。 メソッドが Wait 戻ったら、呼び出しを行ったスレッドが同期ドメインの再入力を待機する必要があります。
こちらもご覧ください
適用対象
Wait(Object)
オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。
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
待機を行うオブジェクト。
戻り値
呼び出し元が、指定したオブジェクトのロックを再取得したために呼び出しが返された場合は true
。 このメソッドは、ロックが再取得されないと制御を戻しません。
- 属性
例外
obj
パラメーターが null
です。
呼び出し元のスレッドは、指定したオブジェクトのロックを所有していません。
Wait
を呼び出したスレッドは、後で待機中の状態を中断されます。 これは、他のスレッドがこのスレッドの Interrupt() メソッドを呼び出すときに起こります。
注釈
指定されたオブジェクトのロックを現在所有しているスレッドは、別のスレッドがアクセスできるようにオブジェクトを解放するために、このメソッドを呼び出します。 ロックの再取得を待機している間、呼び出し元はブロックされます。 このメソッドは、呼び出し元が別のスレッドの操作の結果として発生する状態変更を待機する必要がある場合に呼び出されます。
スレッドが を呼び出 Wait
すと、オブジェクトのロックが解放され、オブジェクトの待機キューに入ります。 オブジェクトの準備キュー内の次のスレッド (存在する場合) はロックを取得し、オブジェクトを排他的に使用します。 を呼び出Wait
すすべてのスレッドは、ロックの所有者によって送信された または PulseAllからPulseシグナルを受信するまで待機キューに残ります。 が送信された場合 Pulse
、待機キューの先頭にあるスレッドのみが影響を受けます。 が送信された場合 PulseAll
、オブジェクトを待機しているすべてのスレッドが影響を受けます。 シグナルを受信すると、1 つ以上のスレッドが待機キューから出て、準備完了キューに入ります。 準備完了キュー内のスレッドは、ロックの再取得を許可されます。
このメソッドは、呼び出し元のスレッドが オブジェクトのロックを再取得すると を返します。 ロックの所有者が または PulseAll
を呼び出Pulse
さない場合、このメソッドは無期限にブロックされることに注意してください。
呼び出し元は、指定したオブジェクトに対して呼び出された回数Enterに関係なく、1 回実行Wait
されます。 概念的には、 メソッドは Wait
オブジェクトに対して呼び出された呼び出 Enter
し元の回数を格納し、ロックされたオブジェクトを完全に解放するために必要な回数だけ呼び出 Exit
します。 呼び出し元は、オブジェクトの再取得を待機している間にブロックします。 呼び出し元がロックを再取得すると、システムは呼び出し元の保存されたEnter
数を復元するために必要な回数だけを呼び出Enter
します。 を呼び出すと Wait
、指定したオブジェクトのロックのみが解放されます。呼び出し元が他のオブジェクトのロックの所有者である場合、これらのロックは解放されません。
同期オブジェクトには、ロックを現在保持しているスレッドへの参照、ロックを取得する準備ができているスレッドを含む準備完了キューへの参照、オブジェクトの状態の変更の通知を待機しているスレッドを含む待機キューへの参照など、いくつかの参照が保持されることに注意してください。
PulseAll、、および Wait
メソッドはPulse、同期されたコード ブロック内から呼び出す必要があります。
メソッドの Pulse 解説では、スレッドが待機していないときに が呼び出された場合 Pulse の動作について説明します。
こちらもご覧ください
適用対象
Wait(Object, Int32)
オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。 指定されたタイムアウト期限を過ぎると、スレッドは実行待ちキューに入ります。
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
スレッドが実行待ちキューに入るまでの待機時間 (ミリ秒)。
戻り値
指定した時間が経過する前にロックが再取得された場合は true
。指定した時間が経過した後にロックが再取得された場合は false
。 このメソッドは、ロックが再取得されるまで制御を戻しません。
- 属性
例外
obj
パラメーターが null
です。
呼び出し元のスレッドは、指定したオブジェクトのロックを所有していません。
Wait
を呼び出したスレッドは、後で待機中の状態を中断されます。 これは、他のスレッドがこのスレッドの Interrupt() メソッドを呼び出すときに起こります。
millisecondsTimeout
パラメーターの値が負で、Infinite と等しくありません。
注釈
このメソッドは、 パラメーターの排他ロック obj
を再取得するまで戻りません。
指定したオブジェクトのロックを現在所有しているスレッドは、別のスレッドがアクセスできるようにオブジェクトを解放するために、このメソッドを呼び出します。 呼び出し元は、ロックの再取得を待機している間にブロックされます。 このメソッドは、呼び出し元が別のスレッドの操作の結果として発生する状態の変更を待機する必要がある場合に呼び出されます。
タイムアウトにより、 メソッドまたは PulseAll メソッドを最初に呼び出さずに別のスレッドがロックを解放した場合に、現在のスレッドが無期限にPulseブロックされないようにします。 また、スレッドを準備キューに移動し、待機キューの前にある他のスレッドをバイパスして、ロックをより早く再取得できるようにします。 スレッドは、 メソッドの戻り値を Wait テストして、タイムアウト前にロックを再取得したかどうかを判断できます。スレッドは待機に入る原因となった条件を評価し、必要に応じてメソッドを Wait 再度呼び出すことができます。
スレッドが を呼び出 Wait
すと、オブジェクトのロックが解放され、オブジェクトの待機キューに入ります。 オブジェクトの準備完了キュー内の次のスレッド (存在する場合) はロックを取得し、オブジェクトを排他的に使用します。 呼び出された Wait
スレッドは、ロックを保持するスレッドが を呼び出すか、キュー内の次のスレッドであり、ロックを保持するスレッドが を呼 PulseAllび出すまで待機キューに残ります Pulse。 ただし、 millisecondsTimeout
別のスレッドがこのオブジェクト Pulse または PulseAll メソッドを呼び出す前に が経過すると、ロックを回復するために、元のスレッドが準備完了キューに移動されます。
Note
パラメーターに がmillisecondsTimeout
指定されている場合Infinite、ロックの所有者が または PulseAllを呼び出Pulseさない限り、このメソッドは無期限にブロックされます。 が 0 の場合 millisecondsTimeout
、 を呼び出 Wait
すスレッドはロックを解放し、すぐに準備完了キューに入ってロックを回復します。
呼び出し元は、指定したオブジェクトに対して呼び出された回数Enterに関係なく、1 回実行Wait
されます。 概念的には、 メソッドは Wait
、呼び出し元がオブジェクトで呼び出された Enter 回数を格納し、ロックされたオブジェクトを完全に解放するために必要な回数だけ呼び出 Exit します。 呼び出し元は、オブジェクトの再取得を待機している間にブロックします。 呼び出し元がロックを再取得すると、システムは必要な回数だけを呼び出して、呼び出 Enter し元の保存された Enter 数を復元します。 を呼び出すと Wait
、指定したオブジェクトのロックのみが解放されます。呼び出し元が他のオブジェクトのロックの所有者である場合、これらのロックは解放されません。
Note
同期オブジェクトには、ロックを現在保持しているスレッドへの参照、ロックを取得する準備完了のスレッドを含む準備完了キューへの参照、待機キューへの参照など、いくつかの参照が保持されます。これには、オブジェクトの状態の変更の通知を待機しているスレッドが含まれます。
PulseAll、、および Wait
メソッドはPulse、同期されたコード ブロック内から呼び出す必要があります。
メソッドの解説では、 Pulse スレッドが待機していないときに が呼び出された場合 Pulse の動作について説明します。
こちらもご覧ください
適用対象
Wait(Object, TimeSpan)
オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。 指定されたタイムアウト期限を過ぎると、スレッドは実行待ちキューに入ります。
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
待機を行うオブジェクト。
戻り値
指定した時間が経過する前にロックが再取得された場合は true
。指定した時間が経過した後にロックが再取得された場合は false
。 このメソッドは、ロックが再取得されるまで制御を戻しません。
- 属性
例外
obj
パラメーターが null
です。
呼び出し元のスレッドは、指定したオブジェクトのロックを所有していません。
Wait
を呼び出したスレッドは、後で待機中の状態を中断されます。 これは、他のスレッドがこのスレッドの Interrupt() メソッドを呼び出すときに起こります。
パラメーターの timeout
値 (ミリ秒単位) は負の値であり、(-1 ミリ秒) を表 Infinite さないか 、Int32.MaxValue より大きい値です。
注釈
このメソッドは、 パラメーターの排他ロック obj
を再取得するまで戻りません。
指定したオブジェクトのロックを現在所有しているスレッドは、別のスレッドがアクセスできるようにオブジェクトを解放するために、このメソッドを呼び出します。 呼び出し元は、ロックの再取得を待機している間にブロックされます。 このメソッドは、呼び出し元が別のスレッドの操作の結果として発生する状態の変更を待機する必要がある場合に呼び出されます。
タイムアウトにより、 メソッドまたは PulseAll メソッドを最初に呼び出さずに別のスレッドがロックを解放した場合に、現在のスレッドが無期限にPulseブロックされないようにします。 また、スレッドを準備キューに移動し、待機キューの前にある他のスレッドをバイパスして、ロックをより早く再取得できるようにします。 スレッドは、 メソッドの戻り値を Wait テストして、タイムアウト前にロックを再取得したかどうかを判断できます。スレッドは待機に入る原因となった条件を評価し、必要に応じてメソッドを Wait 再度呼び出すことができます。
スレッドが を呼び出 Wait
すと、オブジェクトのロックが解放され、オブジェクトの待機キューに入ります。 オブジェクトの準備完了キュー内の次のスレッド (存在する場合) はロックを取得し、オブジェクトを排他的に使用します。 呼び出された Wait
スレッドは、ロックを保持するスレッドが を呼び出すか、キュー内の次のスレッドであり、ロックを保持するスレッドが を呼 PulseAllび出すまで待機キューに残ります Pulse。 ただし、 timeout
別のスレッドがこのオブジェクト Pulse または PulseAll メソッドを呼び出す前に が経過すると、ロックを回復するために、元のスレッドが準備完了キューに移動されます。
Note
パラメーターに TimeSpan -1 ミリ秒を表す が指定されているtimeout
場合、ロックの所有者が または PulseAllを呼び出Pulseさない限り、このメソッドは無期限にブロックされます。 が 0 ミリ秒の場合 timeout
、 を呼び出 Wait
すスレッドはロックを解放し、すぐに準備完了キューに入ってロックを回復します。
呼び出し元は、指定したオブジェクトに対して呼び出された回数Enterに関係なく、1 回実行Wait
されます。 概念的には、 メソッドは Wait
、呼び出し元がオブジェクトで呼び出された Enter 回数を格納し、ロックされたオブジェクトを完全に解放するために必要な回数だけ呼び出 Exit します。 呼び出し元は、オブジェクトの再取得を待機している間にブロックします。 呼び出し元がロックを再取得すると、システムは必要な回数だけを呼び出して、呼び出 Enter し元の保存された Enter 数を復元します。 を呼び出すと Wait
、指定したオブジェクトのロックのみが解放されます。呼び出し元が他のオブジェクトのロックの所有者である場合、これらのロックは解放されません。
Note
同期オブジェクトには、ロックを現在保持しているスレッドへの参照、ロックを取得する準備完了のスレッドを含む準備完了キューへの参照、待機キューへの参照など、いくつかの参照が保持されます。これには、オブジェクトの状態の変更の通知を待機しているスレッドが含まれます。
PulseAll、、および Wait
メソッドはPulse、同期されたコード ブロック内から呼び出す必要があります。
メソッドの解説では、 Pulse スレッドが待機していないときに が呼び出された場合 Pulse の動作について説明します。
こちらもご覧ください
適用対象
Wait(Object, TimeSpan, Boolean)
オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。 指定されたタイムアウト期限を過ぎると、スレッドは実行待ちキューに入ります。 または、待機の前に同期化されたコンテキストの同期ドメインを終了し、ドメインを後で再取得します。
public:
static bool Wait(System::Object ^ obj, TimeSpan timeout, bool exitContext);
public static bool Wait (object obj, TimeSpan timeout, bool exitContext);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait (object obj, TimeSpan timeout, bool exitContext);
static member Wait : obj * TimeSpan * bool -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj * TimeSpan * bool -> bool
Public Shared Function Wait (obj As Object, timeout As TimeSpan, exitContext As Boolean) As Boolean
パラメーター
- obj
- Object
待機を行うオブジェクト。
- exitContext
- Boolean
待機の前にコンテキストの同期ドメイン (同期されたコンテキストの場合) を終了および再取得する場合はtrue
。それ以外の場合は false
。
戻り値
指定した時間が経過する前にロックが再取得された場合は true
。指定した時間が経過した後にロックが再取得された場合は false
。 このメソッドは、ロックが再取得されるまで制御を戻しません。
- 属性
例外
obj
パラメーターが null
です。
Wait
は、同期されたコード ブロック内からは呼び出されません。
Wait を呼び出すスレッドは、後で待機状態の途中で中断されます。 これは、他のスレッドがこのスレッドの Interrupt() メソッドを呼び出すときに起こります。
パラメーターは timeout
負の値であり、(-1 ミリ秒) を表 Infinite さないか、 Int32.MaxValue より大きい値です。
注釈
このメソッドは、 パラメーターの排他ロック obj
を再取得するまで戻りません。
指定したオブジェクトのロックを現在所有しているスレッドは、別のスレッドがアクセスできるようにオブジェクトを解放するために、このメソッドを呼び出します。 呼び出し元は、ロックの再取得を待機している間にブロックされます。 このメソッドは、呼び出し元が別のスレッドの操作の結果として発生する状態の変更を待機する必要がある場合に呼び出されます。
タイムアウトにより、 メソッドまたは PulseAll メソッドを最初に呼び出さずに別のスレッドがロックを解放した場合に、現在のスレッドが無期限にPulseブロックされないようにします。 また、スレッドを準備キューに移動し、待機キューの前にある他のスレッドをバイパスして、ロックをより早く再取得できるようにします。 スレッドは、 メソッドの戻り値を Wait テストして、タイムアウト前にロックを再取得したかどうかを判断できます。スレッドは待機に入る原因となった条件を評価し、必要に応じてメソッドを Wait 再度呼び出すことができます。
スレッドが を呼び出 Wait
すと、ロックが解放され、待機キューに入ります。 この時点で、準備完了キュー内の次のスレッド (存在する場合) は、ロックを制御できます。 呼び出された Wait
スレッドは、ロックを保持するスレッドが を呼び出すか、キュー内の次のスレッドであり、ロックを保持するスレッドが を呼 PulseAllび出すまで待機キューに残ります Pulse。 ただし、 timeout
別のスレッドがこのオブジェクト Pulse または PulseAll メソッドを呼び出す前にミリ秒が経過すると、ロックを回復するために、元のスレッドが準備完了キューに移動されます。
Note
パラメーターに TimeSpan -1 ミリ秒を表す が指定されているtimeout
場合、ロックの所有者が または PulseAllを呼び出Pulseさない限り、このメソッドは無期限にブロックされます。 が 0 ミリ秒の場合 timeout
、 を呼び出 Wait
すスレッドはロックを解放し、すぐに準備完了キューに入ってロックを回復します。
呼び出し元は、指定したオブジェクトに対して呼び出された回数Enterに関係なく、1 回実行Wait
されます。 概念的には、 メソッドは Wait
、呼び出し元がオブジェクトで呼び出された Enter 回数を格納し、ロックされたオブジェクトを完全に解放するために必要な回数だけ呼び出 Exit します。 呼び出し元は、オブジェクトの再取得を待機している間にブロックします。 呼び出し元がロックを再取得すると、システムは必要な回数だけを呼び出して、呼び出 Enter し元の保存された Enter 数を復元します。 を呼び出すと Wait
、指定したオブジェクトのロックのみが解放されます。呼び出し元が他のオブジェクトのロックの所有者である場合、これらのロックは解放されません。
Note
同期オブジェクトには、ロックを現在保持しているスレッドへの参照、ロックを取得する準備完了のスレッドを含む準備完了キューへの参照、待機キューへの参照など、いくつかの参照が保持されます。これには、オブジェクトの状態の変更の通知を待機しているスレッドが含まれます。
PulseAll、、および Wait
メソッドはPulse、同期されたコード ブロック内から呼び出す必要があります。
メソッドの解説では、 Pulse スレッドが待機していないときに が呼び出された場合 Pulse の動作について説明します。
コンテキストの終了に関する注意事項
パラメーターはexitContext
、既定以外の Wait マネージド コンテキスト内から メソッドが呼び出されない限り、効果はありません。 これは、スレッドが から ContextBoundObject派生したクラスのインスタンスの呼び出し内にある場合に発生する可能性があります。 から派生 ContextBoundObjectしていないクラスで現在メソッドを実行している場合でも 、 Stringが現在のアプリケーション ドメイン内のスタック上にある場合 ContextBoundObject は、既定以外のコンテキストにすることができます。
コードが既定以外のコンテキストで実行されている場合、 をtrue
exitContext
指定すると、 メソッドを実行する前に、スレッドは既定以外のマネージド コンテキスト (つまり、既定のコンテキストに移行) をWait終了します。 メソッドの呼び出しが完了すると、元の既定以外のコンテキストに Wait 戻ります。
これは、コンテキスト バインド クラスに 属性が適用されている場合に SynchronizationAttribute 便利です。 その場合、クラスのメンバーに対するすべての呼び出しが自動的に同期され、同期ドメインはクラスのコード本文全体になります。 メンバーの呼び出し履歴のコードが メソッドをWait呼び出し、 に をexitContext
指定true
すると、スレッドは同期ドメインを終了し、オブジェクトの任意のメンバーへの呼び出しでブロックされているスレッドを続行できます。 メソッドから制御が Wait 戻ったら、呼び出しを行ったスレッドが同期ドメインの再入力を待機する必要があります。
こちらもご覧ください
適用対象
フィードバック
フィードバックの送信と表示