Lingua

AsyncReaderWriterLock Classe

Definizione

Blocco non bloccante che consente l'accesso simultaneo, l'accesso esclusivo o simultaneo con l'aggiornamento all'accesso esclusivo.

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
Ereditarietà
AsyncReaderWriterLock
Derivato
Implementazioni

Commenti

È necessario usare un elemento awaitable personalizzato anziché restituire semplicemente Task{LockReleaser} perché è necessario impostare i dati CallContext nel contesto della persona che riceve il blocco, che richiede che venga eseguito il codice all'inizio della continuazione (sia che si restituisca o meno).

Costruttori

Nome Descrizione
AsyncReaderWriterLock()

Inizializza una nuova istanza della classe AsyncReaderWriterLock.

AsyncReaderWriterLock(Boolean)

Inizializza una nuova istanza della classe AsyncReaderWriterLock.

AsyncReaderWriterLock(JoinableTaskContext, Boolean)

Inizializza una nuova istanza della classe AsyncReaderWriterLock.

Proprietà

Nome Descrizione
AmbientLock

Ottiene il blocco mantenuto dal contesto di esecuzione del chiamante.

CanCurrentThreadHoldActiveLock

Ottiene un valore che indica se il thread corrente può contenere un blocco attivo.

CaptureDiagnostics

Ottiene o imposta un valore che indica se è necessario spendere risorse aggiuntive per raccogliere informazioni utili per la diagnosi dei deadlock e così via.

Completion

Ottiene un'attività il cui completamento segnala che questo blocco non genera più blocchi.

DeadlockCheckTimeout

Ottiene un ritardo di tempo per verificare se il blocco del writer in sospeso e il reader blocca un deadlock.

IsAnyLockHeld

Ottiene un valore che indica se qualsiasi tipo di blocco viene mantenuto dal chiamante e può essere utilizzato immediatamente in base al contesto del chiamante.

IsAnyPassiveLockHeld

Ottiene un valore che indica se qualsiasi tipo di blocco viene mantenuto dal chiamante senza considerare la compatibilità del blocco del contesto del chiamante.

IsPassiveReadLockHeld

Ottiene un valore che indica se un blocco di lettura viene mantenuto dal chiamante senza considerare la compatibilità del blocco del contesto del chiamante.

IsPassiveUpgradeableReadLockHeld

Ottiene un valore che indica se un blocco di lettura aggiornabile viene mantenuto dal chiamante senza considerare la compatibilità del blocco del contesto del chiamante.

IsPassiveWriteLockHeld

Ottiene un valore che indica se un blocco di scrittura viene mantenuto dal chiamante senza considerare la compatibilità del blocco del contesto del chiamante.

IsReadLockHeld

Ottiene un valore che indica se il chiamante contiene un blocco di lettura.

IsUnsupportedSynchronizationContext

Ottiene un valore che indica se synchronizationContext corrente è uno non supportato da questo blocco.

IsUpgradeableReadLockHeld

Ottiene un valore che indica se il chiamante contiene un blocco di lettura aggiornabile.

IsWriteLockHeld

Ottiene un valore che indica se il chiamante contiene un blocco di scrittura.

NoMessagePumpSynchronizationContext

Ottiene un oggetto SynchronizationContext che, se applicato, elimina qualsiasi message pump che può essere eseguito durante blocchi sincroni del thread chiamante.

SyncObject

Ottiene l'oggetto utilizzato per sincronizzare l'accesso ai campi dell'istanza.

Metodi

Nome Descrizione
Complete()

Fa sì che le nuove richieste di blocco di primo livello vengano rifiutate e che l'attività Completion passi a uno stato completato dopo il rilascio di eventuali blocchi rilasciati.

Dispose()

Blocco non bloccante che consente l'accesso simultaneo, l'accesso esclusivo o simultaneo con l'aggiornamento all'accesso esclusivo.

Dispose(Boolean)

Elimina le risorse gestite e non gestite mantenute da questa istanza.

GetAggregateLockFlags()

Restituisce l'aggregazione dei flag di blocco per tutti i blocchi annidati.

GetHangReport()

Contribuisce ai dati per un report di blocco.

GetTaskSchedulerForReadLockRequest()

Ottenere l'utilità di pianificazione dell'attività per eseguire la continuazione quando viene acquisito il blocco. AsyncReaderWriterLock usa uno speciale SynchronizationContext per gestire blocchi esclusivi e ignorerà l'utilità di pianificazione delle attività fornita, quindi viene usata solo in uno scenario di blocco in lettura. Questo metodo viene chiamato all'interno del contesto di esecuzione per attendere il blocco di lettura, in modo che possa essere prelevato TaskScheduler in base al contesto di esecuzione corrente. Nota: l'utilità di pianificazione dell'attività viene usata solo quando il blocco viene rilasciato in un secondo momento. Se il blocco viene generato immediatamente quando CanCurrentThreadHoldActiveLock restituisce true, verrà ignorato.

HideLocks()

Impedisce l'uso o la visibilità dei blocchi del chiamante fino a quando il valore restituito non viene eliminato.

LockStackContains(AsyncReaderWriterLock+LockFlags, AsyncReaderWriterLock+LockHandle)

Controlla se i flag aggregati di tutti i blocchi nello stack di blocchi soddisfano i flag specificati.

OnBeforeExclusiveLockReleasedAsync()

Generato quando l'ultimo blocco di scrittura sta per essere rilasciato.

OnBeforeLockReleasedAsync(Boolean, AsyncReaderWriterLock+LockHandle)

Generato quando viene rilasciato un blocco.

OnBeforeWriteLockReleased(Func<Task>)

Registra un callback da richiamare quando il blocco di scrittura mantenuto dal chiamante sta per essere rilasciato (blocco di scrittura più esterno).

OnCriticalFailure(Exception)

Richiamato quando il blocco rileva un errore interno o un modello di utilizzo non valido che indica un grave difetto da segnalare immediatamente all'applicazione e/o arrestare il processo per evitare blocchi o danneggiamenti dei dati.

OnCriticalFailure(String)

Richiamato quando il blocco rileva un errore interno o un modello di utilizzo non valido che indica un grave difetto da segnalare immediatamente all'applicazione e/o arrestare il processo per evitare blocchi o danneggiamenti dei dati.

OnExclusiveLockReleasedAsync()

Richiamato dopo il rilascio di un blocco esclusivo, ma prima che chiunque abbia la possibilità di entrare nel blocco.

OnUpgradeableReadLockReleased()

Richiamato quando viene rilasciato un blocco di lettura aggiornabile di primo livello, senza alcun blocco rimanente (scrittura).

ReadLockAsync(CancellationToken)

Ottiene un blocco di lettura, in attesa asincrono del blocco se non è immediatamente disponibile.

UpgradeableReadLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken)

Ottiene un blocco di lettura aggiornabile, in modo asincrono in attesa del blocco se non è immediatamente disponibile.

UpgradeableReadLockAsync(CancellationToken)

Ottiene un blocco di lettura aggiornabile, in modo asincrono in attesa del blocco se non è immediatamente disponibile.

WriteLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken)

Ottiene un blocco di scrittura, in attesa asincrono del blocco se non è immediatamente disponibile.

WriteLockAsync(CancellationToken)

Ottiene un blocco di scrittura, in attesa asincrono del blocco se non è immediatamente disponibile.

Implementazioni dell'interfaccia esplicita

Nome Descrizione
IHangReportContributor.GetHangReport()

Contribuisce ai dati per un report di blocco.

Si applica a

Thread safety

Questo tipo è thread-safe per tutti i membri.