共用方式為


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 是否為這個鎖定不支援的同步處理Context。

IsUpgradeableReadLockHeld

取得值,指出呼叫端是否保存可升級的讀取鎖定。

IsWriteLockHeld

取得值,指出呼叫端是否保存寫入鎖定。

NoMessagePumpSynchronizationContext

SynchronizationContext取得 ,套用時會隱藏呼叫線程同步區塊期間可能會執行的任何訊息幫浦。

SyncObject

取得對象,這個物件可用來同步存取這個實例的欄位。

方法

Complete()

造成新的最上層鎖定要求遭到拒絕,並造成 Completion 工作在所有發出的鎖定都已解除之後轉換至已完成狀態。

Dispose()

非封鎖鎖定,允許並行存取、獨佔存取,或可升級為獨佔存取的並行存取。

Dispose(Boolean)

處置此實例所持有的Managed和Unmanaged資源。

GetAggregateLockFlags()

傳回所有巢狀鎖定的鎖定旗標彙總。

GetHangReport()

提供用於懸置狀況報表的資料。

GetTaskSchedulerForReadLockRequest()

取得鎖定時,取得工作排程器以執行接續。 AsyncReaderWriterLock 會使用特殊 SynchronizationContext 來處理獨佔鎖定,而且會忽略提供的工作排程器,因此這隻適用於讀取鎖定案例。 這個方法會在執行內容內呼叫以等候讀取鎖定,以便根據目前的執行內容進行 TaskScheduler 挑選。 注意:只有在稍後發出鎖定時,才會使用工作排程器。 如果鎖定會在傳回 true 時 CanCurrentThreadHoldActiveLock 立即發出,則會予以忽略。

HideLocks()

防止使用或顯示呼叫端鎖定,直到傳回的值已處置為止。

LockStackContains(AsyncReaderWriterLock+LockFlags, AsyncReaderWriterLock+LockHandle)

檢查鎖定堆疊中所有鎖定的匯總旗標是否符合指定的旗標, (s) 。

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

提供用於懸置狀況報表的資料。

適用於

執行緒安全性

此類型適用於所有成員的安全線程。