Monitor.Wait メソッド

定義

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

オーバーロード

名前 説明
Wait(Object, Int32, Boolean)

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

Wait(Object)

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

Wait(Object, Int32)

オブジェクトのロックを解放し、ロックを再取得するまで現在のスレッドをブロックします。 指定したタイムアウト間隔が経過すると、スレッドは準備完了キューに入ります。

Wait(Object, TimeSpan)

オブジェクトのロックを解放し、ロックを再取得するまで現在のスレッドをブロックします。 指定したタイムアウト間隔が経過すると、スレッドは準備完了キューに入ります。

Wait(Object, TimeSpan, Boolean)

オブジェクトのロックを解放し、ロックを再取得するまで現在のスレッドをブロックします。 指定したタイムアウト間隔が経過すると、スレッドは準備完了キューに入ります。 必要に応じて、待機する前に同期コンテキストの同期ドメインを終了し、後でドメインを再取得します。

Wait(Object, Int32, Boolean)

ソース:
Monitor.cs
ソース:
Monitor.cs
ソース:
Monitor.cs
ソース:
Monitor.cs
ソース:
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

返品

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

属性

例外

obj パラメーターはnull

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

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

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

注釈

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

こちらもご覧ください

適用対象

Wait(Object)

ソース:
Monitor.cs
ソース:
Monitor.cs
ソース:
Monitor.cs
ソース:
Monitor.cs
ソース:
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呼び出すすべてのスレッドは、ロックの所有者によって送信されたPulseまたはPulseAllからシグナルを受信するまで待機キューに残ります。 Pulseが送信されると、待機キューの先頭にあるスレッドのみが影響を受ける。 PulseAllが送信されると、オブジェクトを待機しているすべてのスレッドが影響を受けます。 シグナルを受信すると、1 つ以上のスレッドが待機キューから出て、準備完了キューに入ります。 準備完了キュー内のスレッドは、ロックを再取得できます。

このメソッドは、呼び出し元のスレッドがオブジェクトのロックを再取得するときに返します。 ロックの所有者が Pulse または PulseAllを呼び出さない場合、このメソッドは無期限にブロックされることに注意してください。

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

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

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

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

こちらもご覧ください

適用対象

Wait(Object, Int32)

ソース:
Monitor.CoreCLR.cs
ソース:
Monitor.cs
ソース:
Monitor.CoreCLR.cs
ソース:
Monitor.CoreCLR.cs
ソース:
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 パラメーターの排他ロックを再取得するまで戻りません。

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

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

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

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

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

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

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

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

こちらもご覧ください

適用対象

Wait(Object, TimeSpan)

ソース:
Monitor.cs
ソース:
Monitor.cs
ソース:
Monitor.cs
ソース:
Monitor.cs
ソース:
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 パラメーターの値 (ミリ秒単位) は負の値であり、Infinite (-1 ミリ秒) を表さないか、Int32.MaxValue より大きい値です。

注釈

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

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

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

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

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

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

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

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

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

こちらもご覧ください

適用対象

Wait(Object, TimeSpan, Boolean)

ソース:
Monitor.cs
ソース:
Monitor.cs
ソース:
Monitor.cs
ソース:
Monitor.cs
ソース:
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

返品

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

属性

例外

obj パラメーターはnull

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

待機を呼び出すスレッドは、後で待機状態から中断されます。 これは、別のスレッドがこのスレッドの Interrupt() メソッドを呼び出すときに発生します。

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

注釈

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

こちらもご覧ください

適用対象