AsyncReaderWriterLock Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Неблокирующая блокировка, обеспечивающая одновременный доступ, монопольный доступ или параллельное обновление до монопольного доступа.
public ref class AsyncReaderWriterLock : IDisposable, Microsoft::VisualStudio::Threading::IHangReportContributor
public class AsyncReaderWriterLock : IDisposable, Microsoft.VisualStudio.Threading.IHangReportContributor
type AsyncReaderWriterLock = class
interface IHangReportContributor
interface IDisposable
Public Class AsyncReaderWriterLock
Implements IDisposable, IHangReportContributor
- Наследование
-
AsyncReaderWriterLock
- Производный
- Реализации
Комментарии
Мы должны использовать настраиваемый ожидающий возврат задачи, а не просто возвращая задачу {Локкрелеасер}, так как нам нужно задать данные CallContext в контексте пользователя, получающего блокировку, что требует, чтобы код выполнялся в начале продолжения (как мы получаем, так и нет).
Конструкторы
| AsyncReaderWriterLock() |
Инициализирует новый экземпляр класса AsyncReaderWriterLock. |
| AsyncReaderWriterLock(Boolean) |
Инициализирует новый экземпляр класса AsyncReaderWriterLock. |
Свойства
| AmbientLock |
Получает блокировку, удерживаемую контекстом выполнения вызывающего объекта. |
| CanCurrentThreadHoldActiveLock |
Возвращает значение, указывающее, разрешено ли текущему потоку удерживать активную блокировку. |
| CaptureDiagnostics |
Возвращает или задает значение, указывающее, следует ли тратить дополнительные ресурсы на получение информации, которая будет полезна при диагностике взаимоблокировок и т. д. |
| Completion |
Получает задачу, завершение которой сигнализирует о том, что эта блокировка больше не будет выдавать других блокировок. |
| IsAnyLockHeld |
Возвращает значение, указывающее, удерживается ли вызывающий объект какой-либо блокировки и может сразу же использоваться в контексте вызывающего объекта. |
| IsAnyPassiveLockHeld |
Возвращает значение, указывающее, удерживается ли вызывающий объект какой-либо блокировки без учета блокировки контекста вызывающего объекта. |
| IsPassiveReadLockHeld |
Возвращает значение, указывающее, удерживается ли блокировка чтения вызывающим объектом без учета блокировки контекста вызывающего объекта. |
| IsPassiveUpgradeableReadLockHeld |
Возвращает значение, указывающее, удерживается ли обновляемая блокировка чтения вызывающим объектом без учета блокировки контекста вызывающего объекта. |
| IsPassiveWriteLockHeld |
Возвращает значение, указывающее, удерживается ли блокировка записи вызывающим объектом без учета блокировки контекста вызывающего объекта. |
| IsReadLockHeld |
Возвращает значение, указывающее, удерживает ли вызывающий объект блокировку чтения. |
| IsUnsupportedSynchronizationContext |
Возвращает значение, указывающее, является ли текущий SynchronizationContext единственным, не поддерживаемым данной блокировкой. |
| IsUpgradeableReadLockHeld |
Возвращает значение, указывающее, содержит ли вызывающий объект обновляемую блокировку чтения. |
| IsWriteLockHeld |
Возвращает значение, указывающее, удерживает ли вызывающий объект блокировку записи. |
| NoMessagePumpSynchronizationContext |
Возвращает, SynchronizationContext который, когда применяется, подавляет любой конвейер сообщений, который может выполняться во время синхронных блоков вызывающего потока. |
| SyncObject |
Возвращает объект, используемый для синхронизации доступа к полям этого экземпляра. |
Методы
| Complete() |
Приводит к тому, что новые запросы блокировки верхнего уровня блокируются, а задача Completion переходит в состояние завершения после снятия всех выданных блокировок. |
| Dispose() | Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. |
| Dispose(Boolean) |
Уничтожает управляемые и неуправляемые ресурсы, удерживаемые этим экземпляром. |
| GetAggregateLockFlags() |
Возвращает сводку флагов блокировки для всех вложенных блокировок. |
| GetHangReport() |
Добавляет данные в отчет о зависаниях. |
| GetTaskSchedulerForReadLockRequest() |
Получение планировщика заданий для выполнения продолжения при получении блокировки. Асинкреадервритерлокк использует специальное SynchronizationContext значение для управления блокировками ексекусиве и будет игнорировать предоставленный планировщик заданий, поэтому он используется только в сценарии блокировки чтения. Этот метод вызывается в контексте выполнения для ожидания блокировки чтения, поэтому он может быть TaskScheduler выполнен на основе текущего контекста выполнения. Примечание. планировщик заданий используется, только если блокировка будет выполнена позже. Если блокировка выдается немедленно при CanCurrentThreadHoldActiveLock возврате значения true, она будет пропущена. |
| HideLocks() |
Предотвращает использование или видимость блокировок вызывающего объекта до тех пор, пока возвращаемое значение не будет уничтожено. |
| LockStackContains(AsyncReaderWriterLock+LockFlags, AsyncReaderWriterLock+LockHandle) |
Проверяет, соответствуют ли Объединенные флаги всех блокировок в стеке блокировок указанным флагам. |
| OnBeforeExclusiveLockReleasedAsync() |
Возникает, когда будет выпущена последняя блокировка записи. |
| OnBeforeLockReleasedAsync(Boolean, AsyncReaderWriterLock+LockHandle) |
Возникает при освобождении любой блокировки. |
| OnBeforeWriteLockReleased(Func<Task>) |
Регистрирует обратный вызов, который будет вызываться, когда блокировка записи, удерживаемая вызывающим объектом, будет окончательно освобождена (внешняя блокировка записи). |
| OnCriticalFailure(Exception) |
Вызывается, когда блокировка обнаруживает внутреннюю ошибку или нелегальную схему использования, указывающую на серьезную брешь, которая должна немедленно передаваться в приложение и/или выключать процесс во избежание зависаний или повреждения данных. |
| OnCriticalFailure(String) |
Вызывается, когда блокировка обнаруживает внутреннюю ошибку или нелегальную схему использования, указывающую на серьезную брешь, которая должна немедленно передаваться в приложение и/или выключать процесс во избежание зависаний или повреждения данных. |
| OnExclusiveLockReleasedAsync() |
Вызывается после освобождения монопольной блокировки, но до того, как любой пользователь сможет войти в блокировку. |
| OnUpgradeableReadLockReleased() |
Вызывается, когда освобождается защищенная блокировка чтения верхнего уровня и не остается блокировки записи. |
| ReadLockAsync(CancellationToken) |
Получает блокировку чтения, асинхронно ожидая блокировки, если она в данный момент недоступна. |
| UpgradeableReadLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken) |
Получает блокировку чтения, асинхронно ожидая блокировки, если она в данный момент недоступна. |
| UpgradeableReadLockAsync(CancellationToken) |
Получает обновляемую блокировку чтения, которая асинхронно ожидает блокировки, если она недоступна немедленно. |
| WriteLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken) |
Получает блокировку записи, асинхронно ожидая блокировки, если она в данный момент недоступна. |
| WriteLockAsync(CancellationToken) |
Получает блокировку записи, асинхронно ожидая блокировки, если она в данный момент недоступна. |
Явные реализации интерфейса
| IHangReportContributor.GetHangReport() |
Добавляет данные в отчет о зависаниях. |
Применяется к
Потокобезопасность
Этот тип является потокобезопасным для всех элементов.