Linguagem

AsyncReaderWriterLock Classe

Definição

Um bloqueio sem bloqueio que permite acesso simultâneo, acesso exclusivo ou simultâneo com capacidade de atualização para acesso 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
Herança
AsyncReaderWriterLock
Derivado
Implementações

Comentários

Temos que usar um awaitable personalizado em vez de simplesmente retornar Task{LockReleaser} porque temos que definir dados CallContext no contexto da pessoa que está recebendo o bloqueio, o que exige que possamos executar o código no início da continuação (independentemente de produzirmos ou não).

Construtores

Nome Description
AsyncReaderWriterLock()

Inicializa uma nova instância da classe AsyncReaderWriterLock.

AsyncReaderWriterLock(Boolean)

Inicializa uma nova instância da classe AsyncReaderWriterLock.

AsyncReaderWriterLock(JoinableTaskContext, Boolean)

Inicializa uma nova instância da classe AsyncReaderWriterLock.

Propriedades

Nome Description
AmbientLock

Obtém o bloqueio mantido pelo contexto de execução do chamador.

CanCurrentThreadHoldActiveLock

Obtém um valor que indica se o thread atual tem permissão para manter um bloqueio ativo.

CaptureDiagnostics

Obtém ou define um valor que indica se recursos adicionais devem ser gastos para coletar informações que seriam úteis no diagnóstico de deadlocks etc.

Completion

Obtém uma tarefa cujo preenchimento sinaliza que esse bloqueio não emitirá mais bloqueios.

DeadlockCheckTimeout

Obtém um atraso de tempo para verificar se bloqueio de gravador pendente e bloqueios de leitor formam um deadlock.

IsAnyLockHeld

Obtém um valor que indica se qualquer tipo de bloqueio é mantido pelo chamador e pode ser usado imediatamente dado o contexto do chamador.

IsAnyPassiveLockHeld

Obtém um valor que indica se qualquer tipo de bloqueio é mantido pelo chamador sem levar em conta a compatibilidade de bloqueio do contexto do chamador.

IsPassiveReadLockHeld

Obtém um valor que indica se um bloqueio de leitura é mantido pelo chamador sem levar em conta a compatibilidade de bloqueio do contexto do chamador.

IsPassiveUpgradeableReadLockHeld

Obtém um valor que indica se um bloqueio de leitura atualizável é mantido pelo chamador sem levar em conta a compatibilidade de bloqueio do contexto do chamador.

IsPassiveWriteLockHeld

Obtém um valor que indica se um bloqueio de gravação é mantido pelo chamador sem levar em conta a compatibilidade de bloqueio do contexto do chamador.

IsReadLockHeld

Obtém um valor que indica se o chamador mantém um bloqueio de leitura.

IsUnsupportedSynchronizationContext

Obtém um valor que indica se o SynchronizationContext atual é aquele que não tem suporte para esse bloqueio.

IsUpgradeableReadLockHeld

Obtém um valor que indica se o chamador mantém um bloqueio de leitura atualizável.

IsWriteLockHeld

Obtém um valor que indica se o chamador mantém um bloqueio de gravação.

NoMessagePumpSynchronizationContext

Obtém um SynchronizationContext que, quando aplicado, suprime qualquer bomba de mensagem que possa ser executada durante blocos síncronos do thread de chamada.

SyncObject

Obtém o objeto usado para sincronizar o acesso aos campos dessa instância.

Métodos

Nome Description
Complete()

Faz com que novas solicitações de bloqueio de nível superior sejam rejeitadas e a tarefa faça a Completion transição para um estado concluído depois que quaisquer bloqueios emitidos tiverem sido liberados.

Dispose()

Um bloqueio sem bloqueio que permite acesso simultâneo, acesso exclusivo ou simultâneo com capacidade de atualização para acesso exclusivo.

Dispose(Boolean)

Descarta recursos gerenciados e não gerenciados mantidos por essa instância.

GetAggregateLockFlags()

Retorna a agregação dos sinalizadores de bloqueio para todos os bloqueios aninhados.

GetHangReport()

Contribui com dados para um relatório de travamento.

GetTaskSchedulerForReadLockRequest()

Obtenha o agendador de tarefas para executar a continuação quando o bloqueio for adquirido. AsyncReaderWriterLock usa um especial SynchronizationContext para lidar com bloqueios exclusivos e ignorará o agendador de tarefas fornecido, portanto, isso só é usado em um cenário de bloqueio de leitura. Esse método é chamado dentro do contexto de execução para aguardar o bloqueio de leitura, para que ele possa ser captado TaskScheduler com base no contexto de execução atual. Observação: o agendador de tarefas só é usado quando o bloqueio é emitido posteriormente. Se o bloqueio for emitido imediatamente quando CanCurrentThreadHoldActiveLock retornar true, ele será ignorado.

HideLocks()

Impede o uso ou a visibilidade dos bloqueios do chamador até que o valor retornado seja descartado.

LockStackContains(AsyncReaderWriterLock+LockFlags, AsyncReaderWriterLock+LockHandle)

Verifica se os sinalizadores agregados de todos os bloqueios na pilha de bloqueio atendem aos sinalizadores especificados.

OnBeforeExclusiveLockReleasedAsync()

Acionado quando o último bloqueio de gravação está prestes a ser liberado.

OnBeforeLockReleasedAsync(Boolean, AsyncReaderWriterLock+LockHandle)

Acionado quando qualquer bloqueio está sendo liberado.

OnBeforeWriteLockReleased(Func<Task>)

Registra um retorno de chamada a ser invocado quando o bloqueio de gravação mantido pelo chamador está prestes a ser finalmente liberado (bloqueio de gravação mais externo).

OnCriticalFailure(Exception)

Invocado quando o bloqueio detecta um erro interno ou um padrão de uso ilegal que indica uma falha grave que deve ser imediatamente relatada ao aplicativo e/ou reduzir o processo para evitar travamentos ou corrupção de dados.

OnCriticalFailure(String)

Invocado quando o bloqueio detecta um erro interno ou um padrão de uso ilegal que indica uma falha grave que deve ser imediatamente relatada ao aplicativo e/ou reduzir o processo para evitar travamentos ou corrupção de dados.

OnExclusiveLockReleasedAsync()

Invocado depois que um bloqueio exclusivo é liberado, mas antes que alguém tenha a chance de entrar no bloqueio.

OnUpgradeableReadLockReleased()

Invocado quando um bloqueio de leitura atualizável de nível superior é liberado, não deixando nenhum bloqueio restante (gravação).

ReadLockAsync(CancellationToken)

Obtém um bloqueio de leitura, aguardando assíncronamente o bloqueio se ele não estiver disponível imediatamente.

UpgradeableReadLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken)

Obtém um bloqueio de leitura atualizável, aguardando assíncronamente o bloqueio se ele não estiver disponível imediatamente.

UpgradeableReadLockAsync(CancellationToken)

Obtém um bloqueio de leitura atualizável, aguardando assíncronamente o bloqueio se ele não estiver disponível imediatamente.

WriteLockAsync(AsyncReaderWriterLock+LockFlags, CancellationToken)

Obtém um bloqueio de gravação, aguardando assíncronamente o bloqueio se ele não estiver disponível imediatamente.

WriteLockAsync(CancellationToken)

Obtém um bloqueio de gravação, aguardando assíncronamente o bloqueio se ele não estiver disponível imediatamente.

Implantações explícitas de interface

Nome Description
IHangReportContributor.GetHangReport()

Contribui com dados para um relatório de travamento.

Aplica-se a

Acesso thread-safe

Esse tipo é thread-safe para todos os membros.