Monitor.Wait メソッド

定義

オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。

オーバーロード

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

オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。 指定されたタイムアウト期限を過ぎると、スレッドは実行待ちキューに入ります。 このメソッドは、コンテキストの同期ドメイン (同期されたコンテキストの場合) が待機の前に終了し、後で再取得されるかどうかも指定します。

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 と等しくありません。

注釈

この API の詳細については、「 Monitor.Wait の補足 API 解説」を参照してください。

こちらもご覧ください

適用対象

Wait(Object)

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

待機を行うオブジェクト。

戻り値

呼び出し元が、指定したオブジェクトのロックを再取得したために呼び出しが返された場合は 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)

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

スレッドが実行待ちキューに入るまでの待機時間 (ミリ秒)。

戻り値

指定した時間が経過する前にロックが再取得された場合は true。指定した時間が経過した後にロックが再取得された場合は false。 このメソッドは、ロックが再取得されるまで制御を戻しません。

属性

例外

obj パラメーターが null です。

呼び出し元のスレッドは、指定したオブジェクトのロックを所有していません。

Wait を呼び出したスレッドは、後で待機中の状態を中断されます。 これは、他のスレッドがこのスレッドの Interrupt() メソッドを呼び出すときに起こります。

millisecondsTimeout パラメーターの値が負で、Infinite と等しくありません。

注釈

このメソッドは、 パラメーターの排他ロック obj を再取得するまで戻りません。

指定したオブジェクトのロックを現在所有しているスレッドは、別のスレッドがアクセスできるようにオブジェクトを解放するために、このメソッドを呼び出します。 呼び出し元は、ロックの再取得を待機している間にブロックされます。 このメソッドは、呼び出し元が別のスレッドの操作の結果として発生する状態の変更を待機する必要がある場合に呼び出されます。

タイムアウトにより、 メソッドまたは PulseAll メソッドを最初に呼び出さずに別のスレッドがロックを解放した場合に、現在のスレッドが無期限にPulseブロックされないようにします。 また、スレッドを準備キューに移動し、待機キューの前にある他のスレッドをバイパスして、ロックをより早く再取得できるようにします。 スレッドは、 メソッドの戻り値を Wait テストして、タイムアウト前にロックを再取得したかどうかを判断できます。スレッドは待機に入る原因となった条件を評価し、必要に応じてメソッドを Wait 再度呼び出すことができます。

スレッドが を呼び出 Waitすと、オブジェクトのロックが解放され、オブジェクトの待機キューに入ります。 オブジェクトの準備完了キュー内の次のスレッド (存在する場合) はロックを取得し、オブジェクトを排他的に使用します。 呼び出された Wait スレッドは、ロックを保持するスレッドが を呼び出すか、キュー内の次のスレッドであり、ロックを保持するスレッドが を呼 PulseAllび出すまで待機キューに残ります Pulse。 ただし、 millisecondsTimeout 別のスレッドがこのオブジェクト Pulse または PulseAll メソッドを呼び出す前に が経過すると、ロックを回復するために、元のスレッドが準備完了キューに移動されます。

注意

パラメーターに がmillisecondsTimeout指定されている場合Infinite、ロックの所有者が または PulseAllを呼び出Pulseさない限り、このメソッドは無期限にブロックされます。 が 0 の場合 millisecondsTimeout 、 を呼び出 Wait すスレッドはロックを解放し、すぐに準備完了キューに入ってロックを回復します。

呼び出し元は、指定したオブジェクトに対して呼び出された回数Enterに関係なく、1 回実行Waitされます。 概念的には、 メソッドは Wait 、呼び出し元がオブジェクトで呼び出された Enter 回数を格納し、ロックされたオブジェクトを完全に解放するために必要な回数だけ呼び出 Exit します。 呼び出し元は、オブジェクトの再取得を待機している間にブロックします。 呼び出し元がロックを再取得すると、システムは必要な回数だけを呼び出して、呼び出 Enter し元の保存された Enter 数を復元します。 を呼び出すと Wait 、指定したオブジェクトのロックのみが解放されます。呼び出し元が他のオブジェクトのロックの所有者である場合、これらのロックは解放されません。

注意

同期オブジェクトには、ロックを現在保持しているスレッドへの参照、ロックを取得する準備完了のスレッドを含む準備完了キューへの参照、待機キューへの参照など、いくつかの参照が保持されます。これには、オブジェクトの状態の変更の通知を待機しているスレッドが含まれます。

PulseAll、、および Wait メソッドはPulse、同期されたコード ブロック内から呼び出す必要があります。

メソッドの解説では、 Pulse スレッドが待機していないときに が呼び出された場合 Pulse の動作について説明します。

こちらもご覧ください

適用対象

Wait(Object, TimeSpan)

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

戻り値

指定した時間が経過する前にロックが再取得された場合は true。指定した時間が経過した後にロックが再取得された場合は false。 このメソッドは、ロックが再取得されるまで制御を戻しません。

属性

例外

obj パラメーターが null です。

呼び出し元のスレッドは、指定したオブジェクトのロックを所有していません。

Wait を呼び出したスレッドは、後で待機中の状態を中断されます。 これは、他のスレッドがこのスレッドの Interrupt() メソッドを呼び出すときに起こります。

パラメーターの timeout 値 (ミリ秒単位) は負の値であり、(-1 ミリ秒) を表 Infinite さないか 、Int32.MaxValue より大きい値です。

注釈

このメソッドは、 パラメーターの排他ロック obj を再取得するまで戻りません。

指定したオブジェクトのロックを現在所有しているスレッドは、別のスレッドがアクセスできるようにオブジェクトを解放するために、このメソッドを呼び出します。 呼び出し元は、ロックの再取得を待機している間にブロックされます。 このメソッドは、呼び出し元が別のスレッドの操作の結果として発生する状態の変更を待機する必要がある場合に呼び出されます。

タイムアウトにより、 メソッドまたは PulseAll メソッドを最初に呼び出さずに別のスレッドがロックを解放した場合に、現在のスレッドが無期限にPulseブロックされないようにします。 また、スレッドを準備キューに移動し、待機キューの前にある他のスレッドをバイパスして、ロックをより早く再取得できるようにします。 スレッドは、 メソッドの戻り値を Wait テストして、タイムアウト前にロックを再取得したかどうかを判断できます。スレッドは待機に入る原因となった条件を評価し、必要に応じてメソッドを Wait 再度呼び出すことができます。

スレッドが を呼び出 Waitすと、オブジェクトのロックが解放され、オブジェクトの待機キューに入ります。 オブジェクトの準備完了キュー内の次のスレッド (存在する場合) はロックを取得し、オブジェクトを排他的に使用します。 呼び出された Wait スレッドは、ロックを保持するスレッドが を呼び出すか、キュー内の次のスレッドであり、ロックを保持するスレッドが を呼 PulseAllび出すまで待機キューに残ります Pulse。 ただし、 timeout 別のスレッドがこのオブジェクト Pulse または PulseAll メソッドを呼び出す前に が経過すると、ロックを回復するために、元のスレッドが準備完了キューに移動されます。

注意

パラメーターに TimeSpan -1 ミリ秒を表す が指定されているtimeout場合、ロックの所有者が または PulseAllを呼び出Pulseさない限り、このメソッドは無期限にブロックされます。 が 0 ミリ秒の場合 timeout 、 を呼び出 Wait すスレッドはロックを解放し、すぐに準備完了キューに入ってロックを回復します。

呼び出し元は、指定したオブジェクトに対して呼び出された回数Enterに関係なく、1 回実行Waitされます。 概念的には、 メソッドは Wait 、呼び出し元がオブジェクトで呼び出された Enter 回数を格納し、ロックされたオブジェクトを完全に解放するために必要な回数だけ呼び出 Exit します。 呼び出し元は、オブジェクトの再取得を待機している間にブロックします。 呼び出し元がロックを再取得すると、システムは必要な回数だけを呼び出して、呼び出 Enter し元の保存された Enter 数を復元します。 を呼び出すと Wait 、指定したオブジェクトのロックのみが解放されます。呼び出し元が他のオブジェクトのロックの所有者である場合、これらのロックは解放されません。

注意

同期オブジェクトには、ロックを現在保持しているスレッドへの参照、ロックを取得する準備完了のスレッドを含む準備完了キューへの参照、待機キューへの参照など、いくつかの参照が保持されます。これには、オブジェクトの状態の変更の通知を待機しているスレッドが含まれます。

PulseAll、、および Wait メソッドはPulse、同期されたコード ブロック内から呼び出す必要があります。

メソッドの解説では、 Pulse スレッドが待機していないときに が呼び出された場合 Pulse の動作について説明します。

こちらもご覧ください

適用対象

Wait(Object, TimeSpan, Boolean)

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

オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまでそのスレッドをブロックします。 指定されたタイムアウト期限を過ぎると、スレッドは実行待ちキューに入ります。 または、待機の前に同期化されたコンテキストの同期ドメインを終了し、ドメインを後で再取得します。

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

待機を行うオブジェクト。

timeout
TimeSpan

スレッドが実行待ちキューに入るまでの時間を表す TimeSpan

exitContext
Boolean

待機の前にコンテキストの同期ドメイン (同期されたコンテキストの場合) を終了および再取得する場合はtrue 。それ以外の場合は false

戻り値

指定した時間が経過する前にロックが再取得された場合は true。指定した時間が経過した後にロックが再取得された場合は false。 このメソッドは、ロックが再取得されるまで制御を戻しません。

属性

例外

obj パラメーターが null です。

Wait は、同期されたコード ブロック内からは呼び出されません。

Wait を呼び出すスレッドは、後で待機状態の途中で中断されます。 これは、他のスレッドがこのスレッドの Interrupt() メソッドを呼び出すときに起こります。

パラメーターは timeout 負の値であり、(-1 ミリ秒) を表 Infinite さないか、 Int32.MaxValue より大きい値です。

注釈

この API の詳細については、「 Monitor.Wait の補足 API 解説」を参照してください。

こちらもご覧ください

適用対象