Sprache

AsyncReaderWriterLock Klasse

Definition

Eine nicht blockierende Sperre, die gleichzeitigen Zugriff, exklusiven Zugriff oder gleichzeitige Upgradebarkeit für 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 wartende Funktion verwenden, anstatt einfach Task{LockReleaser} zurückzugeben, da wir CallContext-Daten im Kontext der Person festlegen müssen, die die Sperre empfängt, was erfordert, dass wir Code am Anfang der Fortsetzung ausführen (unabhängig davon, ob wir ausbeuten oder nicht).

Konstruktoren

Name Beschreibung
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

Name Beschreibung
AmbientLock

Ruft die Sperre ab, die vom Ausführungskontext des Aufrufers gehalten wird.

CanCurrentThreadHoldActiveLock

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

CaptureDiagnostics

Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob zusätzliche Ressourcen zum Sammeln von Informationen aufgewendet werden sollen, die bei der Diagnose von Deadlocks nützlich wären usw.

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-Sperre und Leseleser eine Deadlock bilden.

IsAnyLockHeld

Ruft einen Wert ab, der angibt, ob eine Art von Sperre vom Aufrufer gehalten wird und sofort verwendet werden kann, wenn der Kontext des Anrufers gegeben ist.

IsAnyPassiveLockHeld

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

IsPassiveReadLockHeld

Ruft einen Wert ab, der angibt, ob eine Lesesperre vom Aufrufer gehalten wird, ohne die Sperrkompatibilität des Kontexts des Aufrufers zu berücksichtigen.

IsPassiveUpgradeableReadLockHeld

Ruft einen Wert ab, der angibt, ob eine upgradefähige Lesesperre vom Aufrufer gehalten wird, ohne die Sperrkompatibilität des Kontexts des Aufrufers zu berücksichtigen.

IsPassiveWriteLockHeld

Ruft einen Wert ab, der angibt, ob eine Schreibsperre vom Aufrufer gehalten wird, ohne die Sperrkompatibilität des Kontexts des Aufrufers zu berücksichtigen.

IsReadLockHeld

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

IsUnsupportedSynchronizationContext

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

IsUpgradeableReadLockHeld

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

IsWriteLockHeld

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

NoMessagePumpSynchronizationContext

Ruft ein SynchronizationContext , das bei Anwendung alle 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 dieser Instanz verwendet wird.

Methoden

Name Beschreibung
Complete()

Bewirkt, dass neue Sperranforderungen auf oberster Ebene abgelehnt werden und die Completion Aufgabe in einen abgeschlossenen Zustand übergeht, nachdem alle ausgestellten Sperren freigegeben wurden.

Dispose()

Eine nicht blockierende Sperre, die gleichzeitigen Zugriff, exklusiven Zugriff oder gleichzeitige Upgradebarkeit für exklusiven Zugriff ermöglicht.

Dispose(Boolean)

Entfernt verwaltete und nicht verwaltete Ressourcen, die von dieser Instanz gehalten werden.

GetAggregateLockFlags()

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

GetHangReport()

Trägt Daten für einen Hang-Bericht bei.

GetTaskSchedulerForReadLockRequest()

Rufen Sie den Aufgabenplaner ab, um die Fortsetzung auszuführen, wenn die Sperre abgerufen wird. AsyncReaderWriterLock verwendet ein Spezielles SynchronizationContext zum Behandeln von exklusiven Sperren und ignoriert den bereitgestellten Aufgabenplaner, 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 aufgenommen TaskScheduler werden kann. Hinweis: Der Aufgabenplaner wird nur verwendet, wenn die Sperre später ausgestellt wird. Wenn die Sperre sofort ausgegeben wird, wenn CanCurrentThreadHoldActiveLock "true" zurückgegeben wird, wird sie ignoriert.

HideLocks()

Verhindert die Verwendung oder Sichtbarkeit der Sperrungen des Aufrufers, bis der zurückgegebene Wert verworfen wird.

LockStackContains(AsyncReaderWriterLock+LockFlags, AsyncReaderWriterLock+LockHandle)

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

OnBeforeExclusiveLockReleasedAsync()

Wird ausgelöst, wenn die letzte Schreibsperre losgelassen werden soll.

OnBeforeLockReleasedAsync(Boolean, AsyncReaderWriterLock+LockHandle)

Wird ausgelöst, wenn eine Sperre freigegeben wird.

OnBeforeWriteLockReleased(Func<Task>)

Registriert einen Rückruf, der aufgerufen werden soll, wenn die schreibgeschützte Sperre des Aufrufers letztendlich freigegeben werden soll (äußerste Schreibsperre).

OnCriticalFailure(Exception)

Wird aufgerufen, wenn die Sperre einen internen Fehler oder ein illegales Verwendungsmuster erkennt, das einen schwerwiegenden Fehler angibt, der sofort an die Anwendung gemeldet werden sollte und/oder den Prozess herunterdrückt, um Blockaden oder Datenbeschädigungen zu vermeiden.

OnCriticalFailure(String)

Wird aufgerufen, wenn die Sperre einen internen Fehler oder ein illegales Verwendungsmuster erkennt, das einen schwerwiegenden Fehler angibt, der sofort an die Anwendung gemeldet werden sollte und/oder den Prozess herunterdrückt, um Blockaden oder Datenbeschädigungen zu vermeiden.

OnExclusiveLockReleasedAsync()

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

OnUpgradeableReadLockReleased()

Wird aufgerufen, wenn eine upgradefähige Lesesperre auf oberster Ebene freigegeben wird und keine verbleibende (Schreib-)Sperre übrig bleibt.

ReadLockAsync(CancellationToken)

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

UpgradeableReadLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken)

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

UpgradeableReadLockAsync(CancellationToken)

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

WriteLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken)

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

WriteLockAsync(CancellationToken)

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

Explizite Schnittstellenimplementierungen

Name Beschreibung
IHangReportContributor.GetHangReport()

Trägt Daten für einen Hang-Bericht bei.

Gilt für:

Threadsicherheit

Dieser Typ ist threadsicher für alle Mitglieder.