ReaderWriterLockSlim.TryEnterWriteLock Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Tenta entrar no bloqueio no modo de gravação, com um tempo limite opcional.
Sobrecargas
TryEnterWriteLock(Int32) |
Tenta entrar no bloqueio no modo de gravação, com um tempo limite opcional. |
TryEnterWriteLock(TimeSpan) |
Tenta entrar no bloqueio no modo de gravação, com um tempo limite opcional. |
TryEnterWriteLock(Int32)
- Origem:
- ReaderWriterLockSlim.cs
- Origem:
- ReaderWriterLockSlim.cs
- Origem:
- ReaderWriterLockSlim.cs
Tenta entrar no bloqueio no modo de gravação, com um tempo limite 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 a aguardar ou -1 (Infinite) para aguardar indefinidamente.
Retornos
true
se o thread de chamada tiver entrado no modo de gravação, caso contrário, false
.
Exceções
A propriedade RecursionPolicy é NoRecursion e o thread atual já entrou no bloqueio.
- ou -
O thread atual inseriu inicialmente o bloqueio no modo de leitura, portanto, tentar entrar no modo de gravação criará a possibilidade de um deadlock.
- ou -
O número de recursão excederia a capacidade do contador. O limite é tão grande que os aplicativos nunca o alcançariam.
O valor de millisecondsTimeout
é negativo, mas não é igual a Infinite (-1), que é o único valor negativo permitido.
O objeto ReaderWriterLockSlim foi descartado.
Exemplos
O exemplo a seguir mostra como usar o TryEnterWriteLock método para inserir o bloqueio no modo de gravação, com um tempo limite. O método mostrado no exemplo adiciona um novo par chave/valor ao cache sincronizado. Se o intervalo de tempo limite especificado decorrer antes que o thread entre no bloqueio, o método retornará false
. O método retornará true
se o par chave/valor for adicionado.
Se a chave já estiver no cache, a exceção gerada pelo interno Dictionary<TKey,TValue> poderá encerrar o método. Um finally
bloco é usado para executar o ExitWriteLock método , garantindo que o chamador saia do bloqueio.
Esse código faz parte de um exemplo maior fornecido para a ReaderWriterLockSlim classe .
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
Comentários
Se millisecondsTimeout
for 0 (zero), esse método verificará o estado de bloqueio e retornará false
imediatamente se o estado desejado não estiver disponível.
Se outros threads tiverem entrado no bloqueio no modo de leitura, um thread que chama o TryEnterWriteLock método bloqueia até que esses threads tenham saído do modo de leitura ou até que o intervalo de tempo limite tenha decorrido. Enquanto os threads estão bloqueados aguardando para entrar no modo de gravação, threads adicionais que tentam entrar no modo de leitura ou no modo atualizável bloqueiam até que todos os threads que aguardam para entrar no modo de gravação tenham cronometrado ou entrado no modo de gravação e, em seguida, tenham saído dele.
Observação
Se um bloqueio permitir recursão, um thread que entrou no bloqueio no modo de gravação poderá entrar no modo de gravação recursivamente, mesmo que outros threads estejam aguardando para entrar no modo de gravação.
Aplica-se a
TryEnterWriteLock(TimeSpan)
- Origem:
- ReaderWriterLockSlim.cs
- Origem:
- ReaderWriterLockSlim.cs
- Origem:
- ReaderWriterLockSlim.cs
Tenta entrar no bloqueio no modo de gravação, com um tempo limite 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 milissegundo para aguardar indefinidamente.
Retornos
true
se o thread de chamada tiver entrado no modo de gravação, caso contrário, false
.
Exceções
A propriedade RecursionPolicy é NoRecursion e o thread atual já entrou no bloqueio.
- ou -
O thread atual inseriu inicialmente o bloqueio no modo de leitura, portanto, tentar entrar no modo de gravação criará a possibilidade de um deadlock.
- ou -
O número de recursão excederia a capacidade do contador. O limite é tão grande que os aplicativos nunca o alcançariam.
O valor de timeout
é negativo, mas não é igual a -1 milissegundo, que é o único valor negativo permitido.
- ou -
O valor de timeout
é maior que Int32.MaxValue milissegundos.
O objeto ReaderWriterLockSlim foi descartado.
Comentários
Se timeout
for 0 (zero), esse método verificará o estado de bloqueio e retornará false
imediatamente se o estado desejado não estiver disponível.
Se outros threads tiverem entrado no bloqueio no modo de leitura, um thread que chama o TryEnterWriteLock método bloqueia até que esses threads tenham saído do modo de leitura ou até que o intervalo de tempo limite tenha decorrido. Enquanto os threads estão bloqueados aguardando para entrar no modo de gravação, threads adicionais que tentam entrar no modo de leitura ou no modo atualizável bloqueiam até que todos os threads que aguardam para entrar no modo de gravação tenham cronometrado ou entrado no modo de gravação e, em seguida, tenham saído dele.
Observação
Se um bloqueio permitir recursão, um thread que entrou no bloqueio no modo de gravação poderá entrar no modo de gravação recursivamente, mesmo que outros threads estejam aguardando para entrar no modo de gravação.