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

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

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

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

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