ReaderWriterLockSlim.TryEnterWriteLock Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Tenta entrar no bloqueio em modo de escrita, com um time-out opcional.
Sobrecargas
| Name | Description |
|---|---|
| TryEnterWriteLock(Int32) |
Tenta entrar no bloqueio em modo de escrita, com um time-out opcional. |
| TryEnterWriteLock(TimeSpan) |
Tenta entrar no bloqueio em modo de escrita, com um time-out opcional. |
TryEnterWriteLock(Int32)
Tenta entrar no bloqueio em modo de escrita, com um time-out opcional.
public:
bool TryEnterWriteLock(int millisecondsTimeout);
public bool TryEnterWriteLock(int millisecondsTimeout);
member this.TryEnterWriteLock : int -> bool
Public Function TryEnterWriteLock (millisecondsTimeout As Integer) As Boolean
Parâmetros
- millisecondsTimeout
- Int32
O número de milissegundos para esperar, ou -1 (Infinite) para esperar indefinidamente.
Devoluções
true se a thread que chamou entrou em modo de escrita, caso contrário, false.
Exceções
A RecursionPolicy propriedade é NoRecursion e o thread atual já entrou no bloqueio.
-ou-
O thread atual entrou inicialmente no bloqueio em modo de leitura e, portanto, tentar entrar no modo de escrita criaria a possibilidade de um deadlock.
-ou-
O número de recursão excederia a capacidade do contador. O limite é tão grande que as aplicações nunca o deverão encontrar.
O valor de millisecondsTimeout é negativo, mas não é igual a Infinite (-1), que é o único valor negativo permitido.
O ReaderWriterLockSlim objeto foi descartado.
Exemplos
O exemplo seguinte mostra como usar o TryEnterWriteLock método para entrar no bloqueio em modo de escrita, com um time-out. O método mostrado no exemplo adiciona um novo par chave/valor à cache sincronizada. Se o intervalo de tempo especificado passar antes da thread entrar no bloqueio, o método devolve false. O método retorna true se o par chave/valor for somado.
Se a chave já estiver na cache, a exceção lançada pelo interior Dictionary<TKey,TValue> pode terminar o método. Um finally bloco é usado para executar o ExitWriteLock método, garantindo que o chamador sai do bloqueio.
Este código faz parte de um exemplo mais amplo fornecido para a ReaderWriterLockSlim turma.
private ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim();
private Dictionary<int, string> innerCache = new Dictionary<int, string>();
Private cacheLock As New ReaderWriterLockSlim()
Private innerCache As New Dictionary(Of Integer, String)
public bool AddWithTimeout(int key, string value, int timeout)
{
if (cacheLock.TryEnterWriteLock(timeout))
{
try
{
innerCache.Add(key, value);
}
finally
{
cacheLock.ExitWriteLock();
}
return true;
}
else
{
return false;
}
}
Public Function AddWithTimeout(ByVal key As Integer, ByVal value As String, _
ByVal timeout As Integer) As Boolean
If cacheLock.TryEnterWriteLock(timeout) Then
Try
innerCache.Add(key, value)
Finally
cacheLock.ExitWriteLock()
End Try
Return True
Else
Return False
End If
End Function
Observações
Se millisecondsTimeout for 0 (zero), este método verifica o estado do bloqueio e retorna false imediatamente se o estado desejado não estiver disponível.
Se outros threads entrarem no lock em modo de leitura, um thread que chama o TryEnterWriteLock método bloqueia-se até que esses threads saiam do modo de leitura ou até que o intervalo de time-out tenha expirado. Enquanto as threads estão bloqueadas à espera de entrar no modo de escrita, as threads adicionais que tentam entrar no modo de leitura ou no modo atualizável bloqueiam até que todas as threads à espera de entrar no modo de escrita tenham expirado o tempo ou entrado no modo de escrita e depois saído dele.
Note
Se um bloqueio permitir recursão, um thread que entrou no lock em modo de escrita pode entrar no modo de escrita recursivamente, mesmo que outros threads estejam à espera de entrar no modo de escrita.
Aplica-se a
TryEnterWriteLock(TimeSpan)
Tenta entrar no bloqueio em modo de escrita, com um time-out opcional.
public:
bool TryEnterWriteLock(TimeSpan timeout);
public bool TryEnterWriteLock(TimeSpan timeout);
member this.TryEnterWriteLock : TimeSpan -> bool
Public Function TryEnterWriteLock (timeout As TimeSpan) As Boolean
Parâmetros
- timeout
- TimeSpan
O intervalo para esperar, ou -1 milissegundos para esperar indefinidamente.
Devoluções
true se a thread que chamou entrou em modo de escrita, caso contrário, false.
Exceções
A RecursionPolicy propriedade é NoRecursion e o thread atual já entrou no bloqueio.
-ou-
O thread atual entrou inicialmente no bloqueio em modo de leitura e, portanto, tentar entrar no modo de escrita criaria a possibilidade de um deadlock.
-ou-
O número de recursão excederia a capacidade do contador. O limite é tão grande que as aplicações nunca o deverão encontrar.
O valor de timeout é negativo, mas não é igual a -1 milissegundos, que é o único valor negativo permitido.
-ou-
O valor de timeout é superior a Int32.MaxValue milissegundos.
O ReaderWriterLockSlim objeto foi descartado.
Observações
Se timeout for 0 (zero), este método verifica o estado do bloqueio e retorna false imediatamente se o estado desejado não estiver disponível.
Se outros threads entrarem no lock em modo de leitura, um thread que chama o TryEnterWriteLock método bloqueia-se até que esses threads saiam do modo de leitura ou até que o intervalo de time-out tenha expirado. Enquanto as threads estão bloqueadas à espera de entrar no modo de escrita, as threads adicionais que tentam entrar no modo de leitura ou no modo atualizável bloqueiam até que todas as threads à espera de entrar no modo de escrita tenham expirado o tempo ou entrado no modo de escrita e depois saído dele.
Note
Se um bloqueio permitir recursão, um thread que entrou no lock em modo de escrita pode entrar no modo de escrita recursivamente, mesmo que outros threads estejam à espera de entrar no modo de escrita.