語言

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
衍生
實作

備註

我們必須使用 custom awaitable,而不是直接回傳 Task{LockReleaser},因為我們必須在接收鎖的使用者上下文中設定 CallContext 資料,這需要我們在繼續開始時執行程式碼(不管我們是否放棄)。

建構函式

名稱 Description
AsyncReaderWriterLock()

初始化 AsyncReaderWriterLock 類別的新執行個體。

AsyncReaderWriterLock(Boolean)

初始化 AsyncReaderWriterLock 類別的新執行個體。

AsyncReaderWriterLock(JoinableTaskContext, Boolean)

初始化 AsyncReaderWriterLock 類別的新執行個體。

屬性

名稱 Description
AmbientLock

取得呼叫者執行上下文所持有的鎖。

CanCurrentThreadHoldActiveLock

會取得一個值,表示目前執行緒是否被允許持有一個主動鎖。

CaptureDiagnostics

取得或設定一個值,指示是否應該投入額外資源收集有助於診斷僵局等有用的資訊。

Completion

會收到一個任務,完成後表示這個鎖不會再發鎖。

DeadlockCheckTimeout

會有一個時間延遲來檢查待處理的寫入鎖定和讀取鎖定是否會形成死結。

IsAnyLockHeld

會取得一個值,表示呼叫者是否持有任何類型的鎖,並可根據呼叫者的上下文立即使用。

IsAnyPassiveLockHeld

獲得一個值,指示呼叫者是否持有任何類型的鎖,而不考慮呼叫者上下文的鎖相容性。

IsPassiveReadLockHeld

會獲得一個值,表示呼叫者是否持有讀取鎖,而不考慮呼叫者上下文的鎖相容性。

IsPassiveUpgradeableReadLockHeld

會獲得一個值,表示呼叫者是否持有可升級的讀取鎖,而不考慮呼叫者上下文的鎖相容性。

IsPassiveWriteLockHeld

會取得一個值,表示呼叫者是否持有寫入鎖,而不考慮呼叫者上下文的鎖相容性。

IsReadLockHeld

會取得一個值,表示呼叫者是否持有讀取鎖。

IsUnsupportedSynchronizationContext

會取得一個值,表示目前的同步上下文是否不受此鎖支援。

IsUpgradeableReadLockHeld

會獲得一個值,表示呼叫者是否持有可升級的讀取鎖。

IsWriteLockHeld

會得到一個值,表示呼叫者是否持有寫入鎖。

NoMessagePumpSynchronizationContext

會得到一個 SynchronizationContext ,當應用時,會抑制在呼叫執行緒同步區塊中可能執行的任何訊息泵。

SyncObject

取得用於同步存取此實例欄位的物件。

方法

名稱 Description
Complete()

會讓新的頂層鎖請求被拒絕,任務 Completion 在釋放所有已發出鎖後,轉換為完成狀態。

Dispose()

一種非阻塞鎖,允許同時存取、排他存取,或同時升級至排他存取。

Dispose(Boolean)

處理此實例所持有的可管理與非管理資源。

GetAggregateLockFlags()

回傳所有巢狀鎖的鎖旗總值。

GetHangReport()

為懸掛報告提供數據。

GetTaskSchedulerForReadLockRequest()

讓任務排程器在鎖定後執行續行。 AsyncReaderWriterLock 使用特殊 SynchronizationContext 碼來處理獨佔鎖,並會忽略任務排程器,因此僅在讀取鎖定情境下使用。 此方法會在執行上下文中被呼叫以等待讀取鎖定,以便根據當前執行上下文讀取 TaskScheduler 。 注意:任務排程器僅在鎖定後續生效時使用。 如果當 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)

取得寫入鎖,若鎖定尚未立即啟用,則非同步等待。

明確介面實作

名稱 Description
IHangReportContributor.GetHangReport()

為懸掛報告提供數據。

適用於

執行緒安全性

此類型對所有成員皆為執行緒安全。