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

Освобождает блокировку объекта и блокирует текущий поток до тех пор, пока тот не получит блокировку снова. Если указанные временные интервалы истекают, поток встает в очередь готовности. Этот метод также указывает на выход из области синхронизации для контекста (если она находится в синхронизированном контексте) до ожидания и ее повторное получение впоследствии.

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 см. в разделе Дополнительные примечания API для Monitor.Wait.

См. также раздел

Применяется к

Wait(Object)

Исходный код:
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 отправке затрагиваются все потоки, ожидающие объекта. При получении сигнала один или несколько потоков покидают очередь ожидания и входят в готовую очередь. Потоку в очереди готовности разрешено повторно запрашивать блокировку.

Этот метод возвращает, когда вызывающий поток повторно запрашивает блокировку объекта . Обратите внимание, что этот метод блокируется на неопределенный срок, если владелец блокировки не вызывает Pulse или PulseAll.

Вызывающий объект выполняется Wait один раз, независимо от количества вызовов Enter для указанного объекта. Концептуально Wait метод сохраняет количество вызовов Enter вызывающего объекта для объекта и столько Exit раз, сколько необходимо для полного освобождения заблокированного объекта. Затем вызывающий объект блокируется, ожидая повторного получения объекта. Когда вызывающий объект повторно запрашивает блокировку, система вызывает Enter столько раз, сколько необходимо для восстановления сохраненного Enter счетчика для вызывающего. Вызов Wait освобождает блокировку только для указанного объекта. Если вызывающий объект является владельцем блокировок для других объектов, эти блокировки не освобождаются.

Обратите внимание, что синхронизированный объект содержит несколько ссылок, включая ссылку на поток, который в настоящее время содержит блокировку, ссылку на готовую очередь, содержащую потоки, готовые к получению блокировки, и ссылку на очередь ожидания, которая содержит потоки, ожидающие уведомления об изменении состояния объекта.

Методы Pulse, PulseAllи Wait должны вызываться из синхронизированного блока кода.

В примечаниях к методу Pulse объясняется, что происходит, если Pulse вызывается, когда потоки не ожидают.

См. также раздел

Применяется к

Wait(Object, Int32)

Исходный код:
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 истекает до того, как другой поток вызывает метод или PulseAll этого объектаPulse, исходный поток перемещается в готовую очередь, чтобы восстановить блокировку.

Примечание

Если Infinite для параметра задано millisecondsTimeout значение , этот метод блокируется на неопределенный срок, если только владелец блокировки не вызывает Pulse или PulseAll. Если millisecondsTimeout значение равно 0, поток, вызывающий Wait блокировку, снимает блокировку и сразу же входит в готовую очередь, чтобы восстановить блокировку.

Вызывающий объект выполняется Wait один раз, независимо от количества вызовов Enter для указанного объекта. Концептуально Wait метод сохраняет количество вызовов Enter вызывающего объекта для объекта и столько Exit раз, сколько необходимо для полного освобождения заблокированного объекта. Затем вызывающий объект блокируется, ожидая повторного получения объекта. Когда вызывающий объект повторно запрашивает блокировку, система вызывает Enter столько раз, сколько необходимо для восстановления сохраненного Enter счетчика для вызывающего. Вызов Wait освобождает блокировку только для указанного объекта. Если вызывающий объект является владельцем блокировок для других объектов, эти блокировки не освобождаются.

Примечание

Синхронизированный объект содержит несколько ссылок, включая ссылку на поток, который в настоящее время содержит блокировку, ссылку на готовую очередь, содержащую потоки, готовые к получению блокировки, и ссылку на очередь ожидания, содержащую потоки, ожидающие уведомления об изменении состояния объекта.

Методы Pulse, PulseAllи Wait должны вызываться из синхронизированного блока кода.

В примечаниях к методу Pulse объясняется, что происходит, если Pulse вызывается, когда потоки не ожидают.

См. также раздел

Применяется к

Wait(Object, TimeSpan)

Исходный код:
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 истекает до того, как другой поток вызывает метод или PulseAll этого объектаPulse, исходный поток перемещается в готовую очередь, чтобы восстановить блокировку.

Примечание

TimeSpan Если для параметра задано значение , представляющее -1 миллисекундаtimeout, этот метод блокируется на неопределенный срок, если только владелец блокировки не вызывает Pulse или PulseAll. Если timeout значение равно 0 миллисекундам, поток, вызывающий Wait блокировку, снимает блокировку, а затем немедленно входит в готовую очередь, чтобы восстановить блокировку.

Вызывающий объект выполняется Wait один раз, независимо от количества вызовов Enter для указанного объекта. Концептуально Wait метод сохраняет количество вызовов Enter вызывающего объекта для объекта и столько Exit раз, сколько необходимо для полного освобождения заблокированного объекта. Затем вызывающий объект блокируется, ожидая повторного получения объекта. Когда вызывающий объект повторно запрашивает блокировку, система вызывает Enter столько раз, сколько необходимо для восстановления сохраненного Enter счетчика для вызывающего. Вызов Wait освобождает блокировку только для указанного объекта. Если вызывающий объект является владельцем блокировок для других объектов, эти блокировки не освобождаются.

Примечание

Синхронизированный объект содержит несколько ссылок, включая ссылку на поток, который в настоящее время содержит блокировку, ссылку на готовую очередь, содержащую потоки, готовые к получению блокировки, и ссылку на очередь ожидания, содержащую потоки, ожидающие уведомления об изменении состояния объекта.

Методы Pulse, PulseAllи Wait должны вызываться из синхронизированного блока кода.

В примечаниях к методу Pulse объясняется, что происходит, если Pulse вызывается, когда потоки не ожидают.

См. также раздел

Применяется к

Wait(Object, TimeSpan, Boolean)

Исходный код:
Monitor.cs
Исходный код:
Monitor.cs
Исходный код:
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 является отрицательным и не представляет Infinite (-1 миллисекунда) или больше Int32.MaxValue.

Комментарии

Дополнительные сведения об этом API см. в разделе Дополнительные примечания API для Monitor.Wait.

См. также раздел

Применяется к