AsyncReaderWriterLock 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
非封鎖鎖定,允許並行存取、獨佔存取,或可升級為獨佔存取的並行存取。
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() |
提供用於懸置狀況報表的資料。 |
適用於
執行緒安全性
此類型適用於所有成員的安全線程。