ReaderWriterLockSlim.TryEnterWriteLock Método

Definición

Intenta entrar en el bloqueo en modo de escritura, con un tiempo de espera opcional.

Sobrecargas

Nombre Description
TryEnterWriteLock(Int32)

Intenta entrar en el bloqueo en modo de escritura, con un tiempo de espera opcional.

TryEnterWriteLock(TimeSpan)

Intenta entrar en el bloqueo en modo de escritura, con un tiempo de espera opcional.

TryEnterWriteLock(Int32)

Intenta entrar en el bloqueo en modo de escritura, con un tiempo de espera 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

Número de milisegundos que se van a esperar o -1 (Infinite) para esperar indefinidamente.

Devoluciones

true si el subproceso de llamada entró en modo de escritura; de lo contrario, false.

Excepciones

La RecursionPolicy propiedad es NoRecursion y el subproceso actual ya ha entrado en el bloqueo.

O bien

Inicialmente, el subproceso actual entró en el bloqueo en modo de lectura y, por lo tanto, al intentar entrar en modo de escritura, se crearía la posibilidad de un interbloqueo.

O bien

El número de recursividad superaría la capacidad del contador. El límite es tan grande que las aplicaciones nunca deben encontrarse con él.

El valor de millisecondsTimeout es negativo, pero no es igual a Infinite (-1), que es el único valor negativo permitido.

El ReaderWriterLockSlim objeto se ha eliminado.

Ejemplos

En el ejemplo siguiente se muestra cómo usar el TryEnterWriteLock método para escribir el bloqueo en modo de escritura, con un tiempo de espera. El método que se muestra en el ejemplo agrega un nuevo par clave-valor a la caché sincronizada. Si el intervalo de tiempo de espera especificado transcurre antes de que el subproceso entre en el bloqueo, el método devuelve false. El método devuelve true si se agrega el par clave-valor.

Si la clave ya está en la memoria caché, se permite que la excepción producida por el elemento interno Dictionary<TKey,TValue> finalice el método. Un finally bloque se usa para ejecutar el ExitWriteLock método , asegurándose de que el autor de la llamada sale del bloqueo.

Este código forma parte de un ejemplo más grande proporcionado para la ReaderWriterLockSlim clase .

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

Comentarios

Si millisecondsTimeout es 0 (cero), este método comprueba el estado de bloqueo y devuelve false inmediatamente si el estado deseado no está disponible.

Si otros subprocesos han entrado en el bloqueo en modo de lectura, un subproceso que llama al TryEnterWriteLock método bloquea hasta que esos subprocesos hayan salido del modo de lectura o hasta que haya transcurrido el intervalo de tiempo de espera. Mientras que los subprocesos se bloquean esperando a entrar en modo de escritura, subprocesos adicionales que intentan entrar en modo de lectura o bloque de modo actualizable hasta que todos los subprocesos que esperan entrar en el modo de escritura han agotado el tiempo de espera o han entrado en modo de escritura y, a continuación, se han salido de él.

Note

Si un bloqueo permite la recursividad, un subproceso que ha entrado en el modo de escritura puede entrar en modo de escritura recursivamente, incluso si otros subprocesos están esperando entrar en modo de escritura.

Se aplica a

TryEnterWriteLock(TimeSpan)

Intenta entrar en el bloqueo en modo de escritura, con un tiempo de espera 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

Intervalo que se va a esperar o -1 milisegundos para esperar indefinidamente.

Devoluciones

true si el subproceso de llamada entró en modo de escritura; de lo contrario, false.

Excepciones

La RecursionPolicy propiedad es NoRecursion y el subproceso actual ya ha entrado en el bloqueo.

O bien

Inicialmente, el subproceso actual entró en el bloqueo en modo de lectura y, por lo tanto, al intentar entrar en modo de escritura, se crearía la posibilidad de un interbloqueo.

O bien

El número de recursividad superaría la capacidad del contador. El límite es tan grande que las aplicaciones nunca deben encontrarse con él.

El valor de timeout es negativo, pero no es igual a -1 milisegundos, que es el único valor negativo permitido.

O bien

El valor de timeout es mayor que Int32.MaxValue milisegundos.

El ReaderWriterLockSlim objeto se ha eliminado.

Comentarios

Si timeout es 0 (cero), este método comprueba el estado de bloqueo y devuelve false inmediatamente si el estado deseado no está disponible.

Si otros subprocesos han entrado en el bloqueo en modo de lectura, un subproceso que llama al TryEnterWriteLock método bloquea hasta que esos subprocesos hayan salido del modo de lectura o hasta que haya transcurrido el intervalo de tiempo de espera. Mientras que los subprocesos se bloquean esperando a entrar en modo de escritura, subprocesos adicionales que intentan entrar en modo de lectura o bloque de modo actualizable hasta que todos los subprocesos que esperan entrar en el modo de escritura han agotado el tiempo de espera o han entrado en modo de escritura y, a continuación, se han salido de él.

Note

Si un bloqueo permite la recursividad, un subproceso que ha entrado en el modo de escritura puede entrar en modo de escritura recursivamente, incluso si otros subprocesos están esperando entrar en modo de escritura.

Se aplica a