Compartir a través de


AsyncReaderWriterLock Clase

Definición

Bloqueo sin bloqueo que permite el acceso simultáneo, el acceso exclusivo o la capacidad de actualización al acceso exclusivo.

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
Herencia
AsyncReaderWriterLock
Derivado
Implementaciones

Comentarios

Tenemos que usar un elemento awaitable personalizado en lugar de simplemente devolver Task{LockReleaser} porque tenemos que establecer datos de CallContext en el contexto de la persona que recibe el bloqueo, lo que requiere que lleguemos a ejecutar código al principio de la continuación (ya sea que se produzca o no).

Constructores

AsyncReaderWriterLock()

Inicializa una nueva instancia de la clase AsyncReaderWriterLock.

AsyncReaderWriterLock(Boolean)

Inicializa una nueva instancia de la clase AsyncReaderWriterLock.

AsyncReaderWriterLock(JoinableTaskContext, Boolean)

Inicializa una nueva instancia de la clase AsyncReaderWriterLock.

Propiedades

AmbientLock

Obtiene el bloqueo retenido por el contexto de ejecución del llamador.

CanCurrentThreadHoldActiveLock

Obtiene un valor que indica si el subproceso actual puede contener un bloqueo activo.

CaptureDiagnostics

Obtiene o establece un valor que indica si se deben gastar recursos adicionales para recopilar información que sería útil para diagnosticar interbloqueos, etc.

Completion

Obtiene una tarea cuya finalización indica que este bloqueo ya no emitirá bloqueos.

DeadlockCheckTimeout

Obtiene un retraso de tiempo para comprobar si el bloqueo de escritura pendiente y los bloqueos del lector forman un interbloqueo.

IsAnyLockHeld

Obtiene un valor que indica si el autor de la llamada mantiene cualquier tipo de bloqueo y se puede usar inmediatamente según el contexto del autor de la llamada.

IsAnyPassiveLockHeld

Obtiene un valor que indica si el autor de la llamada mantiene algún tipo de bloqueo sin tener en cuenta la compatibilidad de bloqueo del contexto del autor de la llamada.

IsPassiveReadLockHeld

Obtiene un valor que indica si el autor de la llamada mantiene un bloqueo de lectura sin tener en cuenta la compatibilidad de bloqueo del contexto del autor de la llamada.

IsPassiveUpgradeableReadLockHeld

Obtiene un valor que indica si el autor de la llamada mantiene un bloqueo de lectura actualizable sin tener en cuenta la compatibilidad de bloqueo del contexto del autor de la llamada.

IsPassiveWriteLockHeld

Obtiene un valor que indica si el autor de la llamada mantiene un bloqueo de escritura sin tener en cuenta la compatibilidad de bloqueo del contexto del autor de la llamada.

IsReadLockHeld

Obtiene un valor que indica si el autor de la llamada contiene un bloqueo de lectura.

IsUnsupportedSynchronizationContext

Obtiene un valor que indica si SynchronizationContext actual es uno que no es compatible con este bloqueo.

IsUpgradeableReadLockHeld

Obtiene un valor que indica si el autor de la llamada contiene un bloqueo de lectura actualizable.

IsWriteLockHeld

Obtiene un valor que indica si el autor de la llamada contiene un bloqueo de escritura.

NoMessagePumpSynchronizationContext

Obtiene un SynchronizationContext objeto que, cuando se aplica, suprime cualquier bomba de mensajes que se pueda ejecutar durante bloques sincrónicos del subproceso que realiza la llamada.

SyncObject

Obtiene el objeto utilizado para sincronizar el acceso a los campos de esta instancia.

Métodos

Complete()

Genera nuevas solicitudes de bloqueo de nivel superior para rechazar y la tarea Completion para efectuar la transición a un estado completado después de que se haya liberado cualquier bloqueo emitido.

Dispose()

Bloqueo sin bloqueo que permite el acceso simultáneo, el acceso exclusivo o la capacidad de actualización al acceso exclusivo.

Dispose(Boolean)

Elimina los recursos administrados y no administrados mantenidos por esta instancia.

GetAggregateLockFlags()

Devuelve el agregado de los marcadores de bloqueo para todos los bloqueos anidados.

GetHangReport()

Aporta datos para un informe de bloqueo.

GetTaskSchedulerForReadLockRequest()

Obtenga el programador de tareas para ejecutar la continuación cuando se adquiere el bloqueo. AsyncReaderWriterLock usa un especial SynchronizationContext para controlar bloqueos exclusivos y omitirá el programador de tareas proporcionado, por lo que esto solo se usa en un escenario de bloqueo de lectura. Se llama a este método dentro del contexto de ejecución para esperar el bloqueo de lectura, por lo que puede recoger TaskScheduler en función del contexto de ejecución actual. Nota: el programador de tareas solo se usa cuando el bloqueo se emite más adelante. Si el bloqueo se emite inmediatamente cuando CanCurrentThreadHoldActiveLock devuelve true, se omitirá.

HideLocks()

Evita el uso o la visibilidad de los bloqueos del llamador hasta que se deseche el valor devuelto.

LockStackContains(AsyncReaderWriterLock+LockFlags, AsyncReaderWriterLock+LockHandle)

Comprueba si las marcas agregadas de todos los bloqueos de la pila de bloqueos satisfacen las marcas especificadas.

OnBeforeExclusiveLockReleasedAsync()

Se desencadena cuando el último bloqueo de escritura está a punto de liberarse.

OnBeforeLockReleasedAsync(Boolean, AsyncReaderWriterLock+LockHandle)

Se desencadena cuando se libera cualquier bloqueo.

OnBeforeWriteLockReleased(Func<Task>)

Registra una devolución de llamada que se va a invocar cuando el bloqueo de escritura mantenido por el autor de la llamada está a punto de liberarse (bloqueo de escritura más externo).

OnCriticalFailure(Exception)

Se invoca cuando el bloqueo detecta un error interno o un patrón de uso no válido que indica un error grave que se debe notificar inmediatamente a la aplicación o desactivar el proceso para evitar bloqueos o daños en los datos.

OnCriticalFailure(String)

Se invoca cuando el bloqueo detecta un error interno o un patrón de uso no válido que indica un error grave que se debe notificar inmediatamente a la aplicación o desactivar el proceso para evitar bloqueos o daños en los datos.

OnExclusiveLockReleasedAsync()

Se invoca después de liberar un bloqueo exclusivo, pero antes de que cualquier persona tenga la oportunidad de entrar en el bloqueo.

OnUpgradeableReadLockReleased()

Se invoca cuando se libera un bloqueo de lectura actualizable de nivel superior, sin dejar ningún bloqueo restante (escritura).

ReadLockAsync(CancellationToken)

Obtiene un bloqueo de lectura, pendiente de bloqueo de forma asincrónica si no está inmediatamente disponible.

UpgradeableReadLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken)

Obtiene un bloqueo de lectura, pendiente de bloqueo de forma asincrónica si no está inmediatamente disponible.

UpgradeableReadLockAsync(CancellationToken)

Obtiene un bloqueo de lectura actualizable, esperando de forma asincrónica el bloqueo si no está disponible inmediatamente.

WriteLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken)

Obtiene un bloqueo de escritura, pendiente de bloqueo de forma asincrónica si no está inmediatamente disponible.

WriteLockAsync(CancellationToken)

Obtiene un bloqueo de escritura, pendiente de bloqueo de forma asincrónica si no está inmediatamente disponible.

Implementaciones de interfaz explícitas

IHangReportContributor.GetHangReport()

Aporta datos para un informe de bloqueo.

Se aplica a

Seguridad para subprocesos

Este tipo es seguro para subprocesos para todos los miembros.