Compartilhar via


ReaderWriterLockSlim.TryEnterWriteLock Método

Definição

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.

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.

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.

Aplica-se a