Compartilhar via


RouteCollection.GetReadLock Método

Definição

Fornece um objeto para gerenciamento de acesso thread-safe quando você recupera um objeto da coleção.

public:
 IDisposable ^ GetReadLock();
public IDisposable GetReadLock ();
member this.GetReadLock : unit -> IDisposable
Public Function GetReadLock () As IDisposable

Retornos

Um objeto que gerencia o acesso thread-safe.

Exemplos

O exemplo a seguir mostra como usar o GetReadLock método quando você recupera uma rota enquanto o aplicativo está em execução. A Using instrução garante que não importa o que aconteça em tempo de execução quando você ler da coleção (se o código for concluído normalmente ou se uma exceção for lançada), o bloqueio será liberado com segurança no final do Using bloco de código.

Comentários

O RouteCollection objeto está disponível para vários processos no aplicativo. Portanto, se você precisar recuperar uma rota quando o aplicativo estiver em execução, use o GetReadLock método para garantir a segurança do thread. Ao obter um bloqueio de leitura na coleção de rotas, verifique se a coleção não será modificada enquanto você estiver tentando recuperá-la.

O GetReadLock método impede que o thread continue até que o bloqueio possa ser adquirido. Se um bloqueio de gravação estiver em vigor, o thread aguardará até que a atualização seja concluída e o bloqueio de gravação seja liberado. O bloqueio de leitura na coleção de rotas é liberado quando o IDisposable objeto retornado por esse método é descartado.

Se você não usar GetReadLock, poderá receber um erro enquanto estiver lendo a RouteCollection coleção. Por exemplo, suponha que você faça um loop pelos objetos na RouteCollection coleção para lê-los, sem chamar GetReadLock. Enquanto você estiver fazendo isso, outro thread de outra solicitação pode chamar GetWriteLock e adicionar uma rota à coleção. O primeiro thread falhará com um erro.

Há dois cenários em que você não precisa chamar GetReadLock:

  • Métodos públicos da RouteCollection classe como GetVirtualPath e GetRouteData chamam GetReadLock internamente. Portanto, você não precisa chamar GetReadLock explicitamente quando chama um método público da RouteCollection classe para recuperar dados da coleção.

  • Quando o aplicativo está sendo iniciado e ainda não está processando solicitações, como no Application_Start manipulador de eventos, apenas um thread está em execução. Como não há outros threads que possam atualizar a coleção enquanto você a está lendo, você não precisa chamar GetReadLock.

Aplica-se a

Confira também