Lenguaje

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 awaitable personalizado en lugar de simplemente devolver Task{LockReleaser} porque tenemos que establecer datos 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 (tanto si se produce como si no).

Constructores

Nombre Description
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

Nombre Description
AmbientLock

Obtiene el bloqueo mantenido por el contexto de ejecución del autor de la llamada.

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 los bloqueos de lectura y bloqueos de escritor pendientes 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 cualquier tipo de bloqueo sin tener en cuenta la compatibilidad del 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 del 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 del 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 que, cuando se aplica, suprime cualquier bomba de mensajes que se pueda ejecutar durante bloques sincrónicos del subproceso de llamada.

SyncObject

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

Métodos

Nombre Description
Complete()

Hace que se rechacen las nuevas solicitudes de bloqueo de nivel superior y la Completion tarea pase a un estado completado después de que se hayan liberado los bloqueos emitidos.

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 las marcas de bloqueo para todos los bloqueos anidados.

GetHangReport()

Contribuye a los datos de 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 autor de la llamada hasta que se elimina 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 en última instancia (bloqueo de escritura más externo).

OnCriticalFailure(Exception)

Se invoca cuando el bloqueo detecta un error interno o un patrón de uso ilegal que indica un error grave que se debe notificar inmediatamente a la aplicación o reducir 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 ilegal que indica un error grave que se debe notificar inmediatamente a la aplicación o reducir 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 alguien tenga la oportunidad de entrar en el bloqueo.

OnUpgradeableReadLockReleased()

Se invoca cuando se libera un bloqueo de lectura actualizable de nivel superior, dejando sin bloqueo restante (escritura).

ReadLockAsync(CancellationToken)

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

UpgradeableReadLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken)

Obtiene un bloqueo de lectura actualizable, a la espera asincrónica del bloqueo si no está disponible inmediatamente.

UpgradeableReadLockAsync(CancellationToken)

Obtiene un bloqueo de lectura actualizable, a la espera asincrónica del bloqueo si no está disponible inmediatamente.

WriteLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken)

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

WriteLockAsync(CancellationToken)

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

Implementaciones de interfaz explícitas

Nombre Description
IHangReportContributor.GetHangReport()

Contribuye a los datos de un informe de bloqueo.

Se aplica a

Seguridad para subprocesos

Este tipo es seguro para subprocesos para todos los miembros.