Язык

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
Производный
Реализации

Комментарии

Мы должны использовать настраиваемый ожидаемый объект, а не просто возвращать задачу{LockReleaser}, так как нам нужно задать данные CallContext в контексте лица, получающего блокировку, что требует, чтобы мы получили код в начале продолжения (если мы получаем или нет).

Конструкторы

Имя Описание
AsyncReaderWriterLock()

Инициализирует новый экземпляр класса AsyncReaderWriterLock.

AsyncReaderWriterLock(Boolean)

Инициализирует новый экземпляр класса AsyncReaderWriterLock.

AsyncReaderWriterLock(JoinableTaskContext, Boolean)

Инициализирует новый экземпляр класса AsyncReaderWriterLock.

Свойства

Имя Описание
AmbientLock

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

CanCurrentThreadHoldActiveLock

Возвращает значение, указывающее, разрешено ли текущему потоку хранить активную блокировку.

CaptureDiagnostics

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

Completion

Получает задачу, которая сигнализирует о том, что эта блокировка больше не выдает блокировки.

DeadlockCheckTimeout

Возвращает задержку времени, чтобы проверить, формируется ли блокировка отложенного средства записи и блокировки чтения.

IsAnyLockHeld

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

IsAnyPassiveLockHeld

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

IsPassiveReadLockHeld

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

IsPassiveUpgradeableReadLockHeld

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

IsPassiveWriteLockHeld

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

IsReadLockHeld

Возвращает значение, указывающее, содержит ли вызывающий объект блокировку чтения.

IsUnsupportedSynchronizationContext

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

IsUpgradeableReadLockHeld

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

IsWriteLockHeld

Возвращает значение, указывающее, содержит ли вызывающий объект блокировку записи.

NoMessagePumpSynchronizationContext

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

SyncObject

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

Методы

Имя Описание
Complete()

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

Dispose()

Блокировка без блокировки, которая разрешает одновременный доступ, монопольный доступ или одновременный с возможностью обновления для монопольного доступа.

Dispose(Boolean)

Удаляет управляемые и неуправляемые ресурсы, удерживаемые этим экземпляром.

GetAggregateLockFlags()

Возвращает агрегат флагов блокировки для всех вложенных блокировок.

GetHangReport()

Предоставляет данные для отчета о зависаниях.

GetTaskSchedulerForReadLockRequest()

Получите планировщик задач для выполнения продолжения при получении блокировки. AsyncReaderWriterLock использует специальное средство 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()

Предоставляет данные для отчета о зависаниях.

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

Потокобезопасность

Этот тип является потокобезопасной для всех членов.