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
派生
实现

注解

我们必须使用自定义可等待项,而不是简单地返回 Task{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 。 注意:仅当稍后颁发锁时,才使用任务计划程序。 如果在返回 true 时 CanCurrentThreadHoldActiveLock 立即发出锁,则将忽略该锁。

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

提供挂起报告数据。

适用于

线程安全性

此类型对所有成员都是线程安全的。