Condividi tramite


AsyncReaderWriterLock Classe

Definizione

Blocco senza blocco che consente l'accesso simultaneo, l'accesso esclusivo o la simultaneità con l'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 oggetto attendabile 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 (se si restituisce o meno).

Costruttori

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à

AmbientLock

Ottiene il blocco impostato dal contesto di esecuzione 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 devono essere spese risorse aggiuntive per raccogliere informazioni utili per diagnosticare i deadlock e così via.

Completion

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

DeadlockCheckTimeout

Ottiene un ritardo di tempo per verificare se il blocco writer in sospeso e i blocchi del lettore formano un deadlock.

IsAnyLockHeld

Ottiene un valore che indica se qualsiasi tipo di blocco viene mantenuto dal chiamante e può essere usato 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 l'oggetto SyncContext corrente è uno che 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, quando applicato, elimina qualsiasi pompa di messaggi che può essere eseguita durante blocchi sincroni del thread chiamante.

SyncObject

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

Metodi

Complete()

Determina il rifiuto di nuove richieste di blocco di primo livello e il passaggio dell'attività Completion allo stato completato dopo che tutti i blocchi emessi sono stati rilasciati.

Dispose()

Blocco senza blocco che consente l'accesso simultaneo, l'accesso esclusivo o la simultaneità con l'accesso esclusivo.

Dispose(Boolean)

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

GetAggregateLockFlags()

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

GetHangReport()

Fornisce i dati per un rapporto 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 ignora l'utilità di pianificazione delle attività fornita, quindi questa operazione viene usata solo in uno scenario di blocco di lettura. Questo metodo viene chiamato all'interno del contesto di esecuzione per attendere il blocco di lettura, in modo che possa essere selezionato 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'utilizzo o la visibilità dei blocchi (o del blocco) del chiamante fino a che il valore restituito è eliminato.

LockStackContains(AsyncReaderWriterLock+LockFlags, AsyncReaderWriterLock+LockHandle)

Verifica se i flag aggregati da 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)

Attivato quando viene rilasciato qualsiasi blocco.

OnBeforeWriteLockReleased(Func<Task>)

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

OnCriticalFailure(Exception)

Richiamato quando il blocco rileva un errore interno o un modello di utilizzo illegale che indica un grave difetto che deve essere segnalato immediatamente all'applicazione e/o ridurre il processo per evitare blocchi o danneggiamenti dei dati.

OnCriticalFailure(String)

Richiamato quando il blocco rileva un errore interno o un modello di utilizzo illegale che indica un grave difetto che deve essere segnalato immediatamente all'applicazione e/o ridurre 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 immettere il blocco.

OnUpgradeableReadLockReleased()

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

ReadLockAsync(CancellationToken)

Ottiene un blocco di lettura, attendendo in modo asincrono il blocco, se non è immediatamente disponibile.

UpgradeableReadLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken)

Ottiene un blocco di lettura, attendendo in modo asincrono il blocco, se non è immediatamente disponibile.

UpgradeableReadLockAsync(CancellationToken)

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

WriteLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken)

Ottiene un blocco di scrittura, attendendo in modo asincrono il blocco, se non è immediatamente disponibile.

WriteLockAsync(CancellationToken)

Ottiene un blocco di scrittura, attendendo in modo asincrono il blocco, se non è immediatamente disponibile.

Implementazioni dell'interfaccia esplicita

IHangReportContributor.GetHangReport()

Fornisce i dati per un rapporto di blocco.

Si applica a

Thread safety

Questo tipo è thread-safe per tutti i membri.