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.