Freigeben über


AsyncReaderWriterLock Klasse

Definition

Eine nicht blockierende Sperre, die gleichzeitigen Zugriff, exklusiven Zugriff oder gleichzeitige Upgrademöglichkeit auf exklusiven Zugriff zulässt.

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
Vererbung
AsyncReaderWriterLock
Abgeleitet
Implementiert

Hinweise

Wir müssen einen benutzerdefinierten Wartewert verwenden, anstatt einfach Task{LockReleaser} zurückzugeben, da wir CallContext-Daten im Kontext der Person festlegen müssen, die die Sperre empfängt. Dies erfordert, dass wir code zu Beginn der Fortsetzung ausführen (unabhängig davon, ob wir die Sperre erhalten oder nicht).

Konstruktoren

AsyncReaderWriterLock()

Initialisiert eine neue Instanz der AsyncReaderWriterLock-Klasse.

AsyncReaderWriterLock(Boolean)

Initialisiert eine neue Instanz der AsyncReaderWriterLock-Klasse.

AsyncReaderWriterLock(JoinableTaskContext, Boolean)

Initialisiert eine neue Instanz der AsyncReaderWriterLock-Klasse.

Eigenschaften

AmbientLock

Ruft die Sperre ab, die durch den Ausführungskontext des Aufrufers angehalten wird.

CanCurrentThreadHoldActiveLock

Ruft einen Wert ab, der angibt, ob der aktuelle Thread eine aktive Sperre enthalten darf.

CaptureDiagnostics

Ruft einen Wert ab, der angibt, ob zusätzliche Ressourcen ausgegeben werden sollen, um Informationen zu sammeln, die bei der Diagnose von Deadlocks usw. nützlich wären, oder legt diesen fest.

Completion

Ruft eine Aufgabe ab, deren Abschluss signalisiert, dass diese Sperre keine Sperren mehr ausgibt.

DeadlockCheckTimeout

Ruft eine Zeitverzögerung ab, um zu überprüfen, ob ausstehende Writer- und Lesersperren ein Deadlock bilden.

IsAnyLockHeld

Ruft einen Wert ab, der angibt, ob eine art von Sperre vom Aufrufer gehalten wird und sofort im Kontext des Aufrufers verwendet werden kann.

IsAnyPassiveLockHeld

Ruft einen Wert ab, der angibt, ob eine Art von Sperre vom Aufrufer ohne Rücksicht auf die Sperrkompatibilität des Kontexts des Aufrufers gehalten wird.

IsPassiveReadLockHeld

Ruft einen Wert ab, der angibt, ob eine Lesesperre vom Aufrufer ohne Berücksichtigung der Sperrkompatibilität des Kontexts des Aufrufers gehalten wird.

IsPassiveUpgradeableReadLockHeld

Ruft einen Wert ab, der angibt, ob eine upgradebare Lesesperre vom Aufrufer ohne Berücksichtigung der Sperrkompatibilität des Kontexts des Aufrufers gehalten wird.

IsPassiveWriteLockHeld

Ruft einen Wert ab, der angibt, ob eine Schreibsperre vom Aufrufer ohne Berücksichtigung der Sperrkompatibilität des Kontexts des Aufrufers gehalten wird.

IsReadLockHeld

Ruft einen Wert ab, der angibt, ob der Aufrufer über eine Lesesperre verfügt.

IsUnsupportedSynchronizationContext

Ruft einen Wert ab, der angibt, ob es sich bei dem aktuellen SynchronizationContext um einen Wert handelt, der von dieser Sperre nicht unterstützt wird.

IsUpgradeableReadLockHeld

Ruft einen Wert ab, der angibt, ob der Aufrufer über eine upgradebare Lesesperre verfügt.

IsWriteLockHeld

Ruft einen Wert ab, der angibt, ob der Aufrufer über eine Schreibsperre verfügt.

NoMessagePumpSynchronizationContext

Ruft eine SynchronizationContext ab, die bei Anwendung jede Nachrichtenpumpe unterdrückt, die während synchroner Blöcke des aufrufenden Threads ausgeführt werden kann.

SyncObject

Ruft das -Objekt ab, das zum Synchronisieren des Zugriffs auf die Felder dieses instance verwendet wird.

Methoden

Complete()

Verursacht, dass neue Sperrenanforderungen der obersten Ebene, die abgelehnt werden sollen und die Completion-Aufgabe in einen abgeschlossenen Zustand übergehen, nachdem alle ausgegebenen Sperren freigegeben wurden.

Dispose()

Eine nicht blockierende Sperre, die gleichzeitigen Zugriff, exklusiven Zugriff oder gleichzeitige Upgrademöglichkeit auf exklusiven Zugriff zulässt.

Dispose(Boolean)

Löscht verwaltete und nicht verwaltete Ressourcen, die von diesem instance.

GetAggregateLockFlags()

Gibt das Aggregat der Sperrflags für alle geschachtelten Sperren zurück.

GetHangReport()

Trägt Daten für einen Absturzbericht bei.

GetTaskSchedulerForReadLockRequest()

Rufen Sie den Taskplaner ab, um die Fortsetzung auszuführen, wenn die Sperre abgerufen wird. AsyncReaderWriterLock verwendet einen Speziellen SynchronizationContext , um exklusive Sperren zu behandeln, und ignoriert den bereitgestellten Taskplaner, sodass dies nur in einem Lesesperrszenario verwendet wird. Diese Methode wird innerhalb des Ausführungskontexts aufgerufen, um die Lesesperre zu warten, sodass sie basierend auf dem aktuellen Ausführungskontext verwendet TaskScheduler werden kann. Hinweis: Der Aufgabenplaner wird nur verwendet, wenn die Sperre später ausgestellt wird. Wenn die Sperre sofort ausgestellt wird, wenn CanCurrentThreadHoldActiveLock true zurückgegeben wird, wird sie ignoriert.

HideLocks()

Verhindert die Verwendung oder Sichtbarkeit der Sperre(n) des Aufrufers, bis der zurückgegebene Wert gelöscht ist.

LockStackContains(AsyncReaderWriterLock+LockFlags, AsyncReaderWriterLock+LockHandle)

Überprüft, ob die aggregierten Flags aus allen Sperren im Sperrstapel die angegebenen Flags erfüllen.

OnBeforeExclusiveLockReleasedAsync()

Wird ausgelöst, wenn die letzte Schreibsperre aufgehoben wird.

OnBeforeLockReleasedAsync(Boolean, AsyncReaderWriterLock+LockHandle)

Wird ausgelöst, wenn eine Sperre aufgehoben wird.

OnBeforeWriteLockReleased(Func<Task>)

Registriert einen Rückruf, der aufgerufen werden soll, wenn die vom Aufrufer gehaltene Schreibsperre endgültig aufgehoben wird (äußerste Schreibsperre).

OnCriticalFailure(Exception)

Wird aufgerufen, wenn die Sperre einen internen Fehler oder ein unzulässiges Verwendungsmuster erkennt, das auf einen schwerwiegenden Fehler hinweist, der sofort an die Anwendung gemeldet werden sollte und/oder den Prozess heruntergefahren werden sollte, um Hänger oder Datenbeschädigungen zu vermeiden.

OnCriticalFailure(String)

Wird aufgerufen, wenn die Sperre einen internen Fehler oder ein unzulässiges Verwendungsmuster erkennt, das auf einen schwerwiegenden Fehler hinweist, der sofort an die Anwendung gemeldet werden sollte und/oder den Prozess heruntergefahren werden sollte, um Hänger oder Datenbeschädigungen zu vermeiden.

OnExclusiveLockReleasedAsync()

Wird aufgerufen, nachdem eine exklusive Sperre aufgehoben wurde, aber bevor jemand die Möglichkeit hat, die Sperre zu betreten.

OnUpgradeableReadLockReleased()

Wird aufgerufen, wenn eine upgradebare Lesesperre der obersten Ebene aufgehoben wird, sodass keine verbleibende (Schreib-)Sperre verbleibt.

ReadLockAsync(CancellationToken)

Ruft eine Lesesperre ab wartet asynchron auf die Sperre, wenn sie nicht sofort verfügbar ist.

UpgradeableReadLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken)

Ruft eine Lesesperre ab wartet asynchron auf die Sperre, wenn sie nicht sofort verfügbar ist.

UpgradeableReadLockAsync(CancellationToken)

Ruft eine upgradebare Lesesperre ab, die asynchron auf die Sperre wartet, wenn sie nicht sofort verfügbar ist.

WriteLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken)

Ruft eine Schreibsperre ab wartet asynchron auf die Sperre, wenn sie nicht sofort verfügbar ist.

WriteLockAsync(CancellationToken)

Ruft eine Schreibsperre ab wartet asynchron auf die Sperre, wenn sie nicht sofort verfügbar ist.

Explizite Schnittstellenimplementierungen

IHangReportContributor.GetHangReport()

Trägt Daten für einen Absturzbericht bei.

Gilt für:

Threadsicherheit

Dieser Typ ist threadsicher für alle Member.