Поделиться через


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()

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

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

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

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