AsyncReaderWriterLock Klasse

Definition

Eine nicht blockierende Sperre, die gleichzeitigen Zugriff, exklusiven Zugriff oder gleichzeitig mit Erweiterbarkeit auf exklusiven Zugriff ermöglicht.

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 eine benutzerdefinierte "awanutzbare" verwenden, anstatt einfach die Aufgabe "{lockreleaser}" zurückzugeben, da wir CallContext-Daten im Kontext der Person festlegen müssen, die die Sperre empfängt. Dies erfordert, dass wir den Code am Anfang der Fortsetzung ausführen (unabhängig davon, ob wir den Wert erhalten).

Konstruktoren

AsyncReaderWriterLock()

Initialisiert eine neue Instanz der AsyncReaderWriterLock-Klasse.

AsyncReaderWriterLock(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 zum Sammeln von Informationen aufgewendet werden sollen, die bei der Diagnose von Deadlocks hilfreich sind, oder legt diesen fest.

Completion

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

IsAnyLockHeld

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

IsAnyPassiveLockHeld

Ruft einen Wert ab, der angibt, ob eine Art von Sperre vom Aufrufer ohne Berücksichtigung der Sperrenkompatibilität des Kontext Aufrufers gehalten wird.

IsPassiveReadLockHeld

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

IsPassiveUpgradeableReadLockHeld

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

IsPassiveWriteLockHeld

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

IsReadLockHeld

Ruft einen Wert ab, der angibt, ob der Aufrufer eine Lesesperre besitzt.

IsUnsupportedSynchronizationContext

Ruft einen Wert ab, der angibt, ob der aktuelle SynchronizationContext ein Wert ist, der von dieser Sperre nicht unterstützt wird.

IsUpgradeableReadLockHeld

Ruft einen Wert ab, der angibt, ob der Aufrufer eine aktualisierbare Lesesperre enthält.

IsWriteLockHeld

Ruft einen Wert ab, der angibt, ob der Aufrufer eine Schreibsperre enthält.

NoMessagePumpSynchronizationContext

Ruft ein ab, SynchronizationContext das bei angewendetem alle nachrichtenpump unterdrückt, die während synchroner Blöcke des aufrufenden Threads ausgeführt werden können.

SyncObject

Ruft das-Objekt ab, das zum Synchronisieren des Zugriffs auf die Felder dieser Instanz 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()

Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.

Dispose(Boolean)

Gibt verwaltete und nicht verwaltete Ressourcen frei, die von dieser Instanz aufbewahrt werden.

GetAggregateLockFlags()

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

GetHangReport()

Trägt Daten für einen Absturzbericht bei.

GetTaskSchedulerForReadLockRequest()

Hiermit wird der Aufgabenplaner zum Ausführen der Fortsetzung abgerufen, wenn die Sperre abgerufen wird. Asynkreaderwriterlock verwendet ein spezielles, SynchronizationContext um execusive Sperren zu behandeln, und ignoriert den bereitgestellten Taskplaner, sodass dies nur in einem Szenario mit Lesesperre verwendet wird. Diese Methode wird innerhalb des Ausführungs Kontexts aufgerufen, um die Lesesperre zu warten, sodass Sie TaskScheduler basierend auf dem aktuellen Ausführungs Kontext abgerufen werden kann. Hinweis: der Aufgabenplaner wird nur verwendet, wenn die Sperre zu einem späteren Zeitpunkt ausgegeben wird. Wenn die Sperre sofort ausgegeben wird CanCurrentThreadHoldActiveLock , wenn true zurückgibt, 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 aller Sperren im Sperr Stapel den angegebenen Flags entsprechen.

OnBeforeExclusiveLockReleasedAsync()

Wird ausgelöst, wenn die letzte Schreibsperre freigegeben 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 letztendlich freigegeben wird (äußerste Schreibsperre).

OnCriticalFailure(Exception)

Wird aufgerufen, wenn die Sperre einen internen Fehler oder ein ungültiges Verwendungs Muster erkennt, das auf einen schwerwiegenden Fehler hinweist, der sofort an die Anwendung gemeldet werden soll, und/oder den Prozess zum Vermeiden von abstürzen oder Daten Beschädigungen heruntergefahren.

OnCriticalFailure(String)

Wird aufgerufen, wenn die Sperre einen internen Fehler oder ein ungültiges Verwendungs Muster erkennt, das auf einen schwerwiegenden Fehler hinweist, der sofort an die Anwendung gemeldet werden soll, und/oder den Prozess zum Vermeiden von abstürzen oder Daten Beschädigungen heruntergefahren.

OnExclusiveLockReleasedAsync()

Wird aufgerufen, nachdem eine exklusive Sperre freigegeben wurde, aber bevor jemand die Möglichkeit hat, die Sperre einzugeben.

OnUpgradeableReadLockReleased()

Wird aufgerufen, wenn eine aktualisierbare Lesesperre auf oberster Ebene freigegeben wird, ohne die verbleibende Sperre (Schreibsperre) zu belassen.

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)

Erhält eine aktualisierbare Lesesperre, 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 für alle Member Thread sicher.