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() |
Добавляет данные в отчет о зависаниях. |
Применяется к
Потокобезопасность
Этот тип является потокобезопасным для всех членов.