Partager via


AsyncReaderWriterLock Classe

Définition

Verrou non bloquant qui autorise l’accès simultané, l’accès exclusif ou la possibilité de mise à niveau vers l’accès exclusif.

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
Héritage
AsyncReaderWriterLock
Dérivé
Implémente

Remarques

Nous devons utiliser un élément awaitable personnalisé au lieu de simplement renvoyer task{LockReleaser}, car nous devons définir les données CallContext dans le contexte de la personne qui reçoit le verrou, ce qui nécessite que nous puissions exécuter du code au début de la continuation (que nous cédions ou non).

Constructeurs

AsyncReaderWriterLock()

Initialise une nouvelle instance de la classe AsyncReaderWriterLock.

AsyncReaderWriterLock(Boolean)

Initialise une nouvelle instance de la classe AsyncReaderWriterLock.

AsyncReaderWriterLock(JoinableTaskContext, Boolean)

Initialise une nouvelle instance de la classe AsyncReaderWriterLock.

Propriétés

AmbientLock

Obtient le verrou géré par le contexte d'exécution de l'appelant.

CanCurrentThreadHoldActiveLock

Obtient une valeur indiquant si le thread actuel est autorisé à contenir un verrou actif.

CaptureDiagnostics

Obtient ou définit une valeur indiquant si des ressources supplémentaires doivent être dépensées pour collecter des informations utiles dans le diagnostic des interblocages, etc.

Completion

Obtient une tâche dont l'achèvement signale que ce verrouillage n'émet plus de verrous.

DeadlockCheckTimeout

Obtient un délai pour case activée si le verrouillage de l’enregistreur en attente et les verrous de lecteur constituent un interblocage.

IsAnyLockHeld

Obtient une valeur indiquant si n’importe quel type de verrou est détenu par l’appelant et peut être utilisé immédiatement en fonction du contexte de l’appelant.

IsAnyPassiveLockHeld

Obtient une valeur indiquant si un type de verrou est détenu par l’appelant sans tenir compte de la compatibilité de verrou du contexte de l’appelant.

IsPassiveReadLockHeld

Obtient une valeur indiquant si un verrou de lecture est détenu par l’appelant sans tenir compte de la compatibilité de verrou du contexte de l’appelant.

IsPassiveUpgradeableReadLockHeld

Obtient une valeur indiquant si un verrou de lecture pouvant être mis à niveau est détenu par l’appelant sans tenir compte de la compatibilité de verrou du contexte de l’appelant.

IsPassiveWriteLockHeld

Obtient une valeur indiquant si un verrou d’écriture est détenu par l’appelant sans tenir compte de la compatibilité de verrou du contexte de l’appelant.

IsReadLockHeld

Obtient une valeur indiquant si l’appelant détient un verrou de lecture.

IsUnsupportedSynchronizationContext

Obtient une valeur indiquant si le SynchronizationContext actuel n’est pas pris en charge par ce verrou.

IsUpgradeableReadLockHeld

Obtient une valeur indiquant si l’appelant détient un verrou de lecture pouvant être mis à niveau.

IsWriteLockHeld

Obtient une valeur indiquant si l’appelant détient un verrou d’écriture.

NoMessagePumpSynchronizationContext

Obtient un SynchronizationContext qui, lorsqu’il est appliqué, supprime toute pompe de messages qui peut s’exécuter pendant les blocs synchrones du thread appelant.

SyncObject

Obtient l’objet utilisé pour synchroniser l’accès aux champs de cette instance.

Méthodes

Complete()

A pour effet que les nouvelles requêtes de verrou de niveau supérieur sont rejetées et la tâche Completion passe à un état terminé après l'ouverture de tous les verrous émis.

Dispose()

Verrou non bloquant qui autorise l’accès simultané, l’accès exclusif ou la possibilité de mise à niveau vers l’accès exclusif.

Dispose(Boolean)

Supprime les ressources managées et non managées détenues par ce instance.

GetAggregateLockFlags()

Retourne l'agrégat des indicateurs de verrou pour tous les verrous imbriqués.

GetHangReport()

Fournit des données pour un rapport de blocage.

GetTaskSchedulerForReadLockRequest()

Obtenez le planificateur de tâches pour exécuter la continuation lorsque le verrou est acquis. AsyncReaderWriterLock utilise un spécial SynchronizationContext pour gérer les verrous exclusifs et ignore le planificateur de tâches fourni. Il est donc utilisé uniquement dans un scénario de verrouillage en lecture. Cette méthode est appelée dans le contexte d’exécution pour attendre le verrou de lecture, afin qu’elle puisse reprendre TaskScheduler en fonction du contexte d’exécution actuel. Remarque : le planificateur de tâches est utilisé uniquement lorsque le verrou est émis ultérieurement. Si le verrou est émis immédiatement lorsque CanCurrentThreadHoldActiveLock retourne true, il est ignoré.

HideLocks()

Empêche l'utilisation ou la visibilité des verrous de l'appelant jusqu'à ce que la valeur retournée soit supprimée.

LockStackContains(AsyncReaderWriterLock+LockFlags, AsyncReaderWriterLock+LockHandle)

Vérifie si les indicateurs agrégés de tous les verrous de la pile de verrous répondent aux indicateurs spécifiés.

OnBeforeExclusiveLockReleasedAsync()

Déclenché lorsque le dernier verrou d’écriture est sur le point d’être libéré.

OnBeforeLockReleasedAsync(Boolean, AsyncReaderWriterLock+LockHandle)

Déclenché lorsqu’un verrou est libéré.

OnBeforeWriteLockReleased(Func<Task>)

Enregistre un rappel à appeler lorsque le verrou d’écriture détenu par l’appelant est sur le point d’être finalement libéré (verrou d’écriture le plus externe).

OnCriticalFailure(Exception)

Appelé lorsque le verrou détecte une erreur interne ou un modèle d’utilisation illégal qui indique une faille grave qui doit être immédiatement signalée à l’application et/ou arrêter le processus pour éviter les blocages ou l’altération des données.

OnCriticalFailure(String)

Appelé lorsque le verrou détecte une erreur interne ou un modèle d’utilisation illégal qui indique une faille grave qui doit être immédiatement signalée à l’application et/ou arrêter le processus pour éviter les blocages ou l’altération des données.

OnExclusiveLockReleasedAsync()

Appelé après la libération d’un verrou exclusif, mais avant que quiconque ait la possibilité d’entrer dans le verrou.

OnUpgradeableReadLockReleased()

Appelé lorsqu’un verrou de lecture pouvant être mis à niveau supérieur est libéré, sans aucun verrou (en écriture) restant.

ReadLockAsync(CancellationToken)

Obtient un verrou de lecture, en attente asynchrone du verrou s'il n'est pas immédiatement disponible.

UpgradeableReadLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken)

Obtient un verrou de lecture, en attente asynchrone du verrou s'il n'est pas immédiatement disponible.

UpgradeableReadLockAsync(CancellationToken)

Obtient un verrou de lecture pouvant être mis à niveau, en attente asynchrone du verrou s’il n’est pas immédiatement disponible.

WriteLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken)

Obtient un verrou d'écriture, en attente asynchrone du verrou s'il n'est pas immédiatement disponible.

WriteLockAsync(CancellationToken)

Obtient un verrou d'écriture, en attente asynchrone du verrou s'il n'est pas immédiatement disponible.

Implémentations d’interfaces explicites

IHangReportContributor.GetHangReport()

Fournit des données pour un rapport de blocage.

S’applique à

Cohérence de thread

Ce type est thread-safe pour tous les membres.