Monitor.Wait Метод

Определение

Освобождает блокировку объекта и блокирует текущий поток до тех пор, пока тот не получит блокировку снова.

Перегрузки

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.

Возвращаемое значение

Boolean

Значение true, если блокировка была получена заново до истечения заданного времени; значение false, если блокировка была получена заново по истечении заданного времени. Этот метод не осуществляет возврат, если блокировка не была получена.

Атрибуты

Исключения

Параметр obj имеет значение null.

Wait — не вызывается из синхронизированного блока кода.

Поток, который вызывает 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 указанного объекта. По сути, Wait метод сохраняет количество вызовов Enter вызывающего объекта и вызывает Exit столько раз, сколько необходимо для полного освобождения заблокированного объекта. Затем вызывающий объект блокируется при ожидании повторного получения объекта. Когда вызывающий объект повторно запрашивает блокировку, система вызывает Enter столько раз, сколько необходимо для восстановления сохраненного Enter счетчика для вызывающего абонента. Вызов Wait освобождает блокировку только для указанного объекта; если вызывающий объект является владельцем блокировок на других объектах, эти блокировки не освобождаются.

Примечание

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

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

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

Заметки о выходе из контекста

ПараметрexitContext не действует, если Wait только метод не вызывается внутри неразделимого управляемого контекста. Это может произойти, если поток находится внутри вызова экземпляра класса, производного от ContextBoundObject. Даже если в настоящее время выполняется метод для класса, который не является производным от ContextBoundObject, например String, вы можете находиться в неразрешительном контексте, если он ContextBoundObject находится в стеке в текущем домене приложения.

При выполнении кода в контексте, отличном отdefault, указывая true для exitContext того, чтобы поток вышел из неdefault управляемого контекста (то есть для перехода в контекст по умолчанию) перед выполнением Wait метода. Он возвращается в исходный недефесультный контекст после завершения вызова Wait метода.

Это может быть полезно, если к классу, привязанным к контексту SynchronizationAttribute , применяется атрибут. В этом случае все вызовы членов класса автоматически синхронизируются, а домен синхронизации — это весь текст кода для класса. Если код в стеке вызовов члена вызывает Wait метод и указывает true для exitContextэтого, поток выходит из домена синхронизации, позволяя потоку, блокированному при вызове любого члена объекта, продолжить. 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

Объект, в котором следует ожидать.

Возвращаемое значение

Boolean

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

Атрибуты

Исключения

Параметр obj имеет значение null.

Вызывающий поток не владеет блокировкой для указанного объекта.

Поток, который вызывает Wait, позже прерывается из состояния ожидания. Это происходит, когда другой поток вызывает метод Interrupt() этого потока.

Комментарии

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

При вызове Waitпотока он освобождает блокировку объекта и входит в очередь ожидания объекта. Следующий поток в очереди готовности объекта (если таковой имеется) получает блокировку и имеет монопольное использование объекта. Все потоки, вызывающие вызов Wait , остаются в очереди ожидания, пока не получат сигнал от Pulse или PulseAll, отправляемый владельцем блокировки. При Pulse отправке затрагивается только поток в голове очереди ожидания. При PulseAll отправке затрагиваются все потоки, ожидающие объекта. При получении сигнала один или несколько потоков покидают очередь ожидания и входят в готовую очередь. Поток в очереди готовности может повторно запрашивать блокировку.

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

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

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

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

Примечания к методу 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

Количество миллисекунд для ожидания постановки в очередь готовности.

Возвращаемое значение

Boolean

Значение 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 указанного объекта. По сути, Wait метод сохраняет количество вызовов Enter вызывающего объекта и вызывает Exit столько раз, сколько необходимо для полного освобождения заблокированного объекта. Затем вызывающий объект блокируется при ожидании повторного получения объекта. Когда вызывающий объект повторно запрашивает блокировку, система вызывает Enter столько раз, сколько необходимо для восстановления сохраненного Enter счетчика для вызывающего абонента. Вызов Wait освобождает блокировку только для указанного объекта; если вызывающий объект является владельцем блокировок на других объектах, эти блокировки не освобождаются.

Примечание

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

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

Примечания к методу 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

Объект, в котором следует ожидать.

timeout
TimeSpan

Класс TimeSpan, представляющий количество времени, до истечения которого поток поступает в очередь ожидания.

Возвращаемое значение

Boolean

Значение true, если блокировка была получена заново до истечения заданного времени; значение false, если блокировка была получена заново по истечении заданного времени. Этот метод не осуществляет возврат, если блокировка не была получена.

Атрибуты

Исключения

Параметр obj имеет значение null.

Вызывающий поток не владеет блокировкой для указанного объекта.

Поток, который вызывает Wait, позже прерывается из состояния ожидания. Это происходит, когда другой поток вызывает метод Interrupt() этого потока.

Значение параметра timeout в миллисекундах отрицательно и не равно Infinite (–1 миллисекунда) или больше MaxValue.

Комментарии

Этот метод не возвращается, пока не будет возвращена монопольная блокировка параметра obj .

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

Время ожидания гарантирует, что текущий поток не блокируется на неопределенный срок, если другой поток освобождает блокировку без первого вызова Pulse или PulseAll метода. Он также перемещает поток в готовую очередь, обходя другие потоки впереди его в очереди ожидания, чтобы он смог быстрее вернуть блокировку. Поток может проверить возвращаемое значение Wait метода, чтобы определить, запрашивается ли блокировка до истечения времени ожидания. Поток может оценить условия, вызвавшие его ввод в ожидание, и при необходимости снова вызвать Wait метод.

При вызове Waitпотока он освобождает блокировку объекта и входит в очередь ожидания объекта. Следующий поток в очереди готовности объекта (если таковой имеется) получает блокировку и имеет монопольное использование объекта. Вызываемый Wait поток остается в очереди ожидания до тех пор, пока поток, содержащий вызов PulseAllблокировки, или следующий поток в очереди и поток, содержащий вызов блокировки Pulse. Однако если timeout выполняется до вызова другим потоком этого объекта Pulse или PulseAll метода, исходный поток перемещается в готовую очередь, чтобы восстановить блокировку.

Примечание

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

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

Примечание

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

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

Примечания к методу 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

Объект, в котором следует ожидать.

timeout
TimeSpan

Класс TimeSpan, представляющий количество времени, до истечения которого поток поступает в очередь ожидания.

exitContext
Boolean

Значение true для выхода из домена синхронизации в текущем контексте перед ожиданием (в синхронизированном контексте) с его последующим повторным получением; в противном случае — значение false.

Возвращаемое значение

Boolean

Значение true, если блокировка была получена заново до истечения заданного времени; значение false, если блокировка была получена заново по истечении заданного времени. Этот метод не осуществляет возврат, если блокировка не была получена.

Атрибуты

Исключения

Параметр obj имеет значение null.

Wait — не вызывается из синхронизированного блока кода.

Для потока, который вызывает Wait, состояние ожидания позже прерывается. Это происходит, когда другой поток вызывает метод Interrupt() этого потока.

Значение параметра timeout в миллисекундах отрицательно и не равно Infinite (–1 миллисекунда) или больше MaxValue.

Комментарии

Этот метод не возвращается, пока не будет возвращена монопольная блокировка параметра obj .

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

Время ожидания гарантирует, что текущий поток не блокируется на неопределенный срок, если другой поток освобождает блокировку без первого вызова Pulse или PulseAll метода. Он также перемещает поток в готовую очередь, обходя другие потоки впереди его в очереди ожидания, чтобы он смог быстрее вернуть блокировку. Поток может проверить возвращаемое значение Wait метода, чтобы определить, запрашивается ли блокировка до истечения времени ожидания. Поток может оценить условия, вызвавшие его ввод в ожидание, и при необходимости снова вызвать Wait метод.

При вызове Waitпотока он освобождает блокировку и входит в очередь ожидания. На этом этапе следующему потоку в очереди готовности (если таковой имеется) разрешено управлять блокировкой. Вызываемый Wait поток остается в очереди ожидания до тех пор, пока поток, содержащий вызов PulseAllблокировки, или следующий поток в очереди и поток, содержащий вызов блокировки Pulse. Однако если timeout миллисекунды истекают до вызова другим потоком этого объекта Pulse или PulseAll метода, исходный поток перемещается в готовую очередь, чтобы восстановить блокировку.

Примечание

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

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

Примечание

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

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

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

Заметки о выходе из контекста

ПараметрexitContext не действует, если Wait только метод не вызывается внутри неразделимого управляемого контекста. Это может произойти, если поток находится внутри вызова экземпляра класса, производного от ContextBoundObject. Даже если в настоящее время выполняется метод для класса, который не является производным от ContextBoundObject, например String, вы можете находиться в неразрешительном контексте, если он ContextBoundObject находится в стеке в текущем домене приложения.

При выполнении кода в контексте, отличном отdefault, указывая true для exitContext того, чтобы поток вышел из неdefault управляемого контекста (то есть для перехода в контекст по умолчанию) перед выполнением Wait метода. Он возвращается в исходный недефесультный контекст после завершения вызова Wait метода.

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

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

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