ReaderWriterLockSlim.EnterReadLock Método

Definición

Intenta entrar en el bloqueo en modo de lectura.

public:
 void EnterReadLock();
public void EnterReadLock();
member this.EnterReadLock : unit -> unit
Public Sub EnterReadLock ()

Excepciones

La RecursionPolicy propiedad es NoRecursiony el subproceso actual ha intentado adquirir el bloqueo de lectura cuando ya contiene el bloqueo de lectura.

O bien

La RecursionPolicy propiedad es NoRecursiony el subproceso actual ha intentado adquirir el bloqueo de lectura cuando ya contiene el bloqueo de escritura.

O bien

El número de recursividad superaría la capacidad del contador. Este límite es tan grande que las aplicaciones nunca deben encontrar esta excepción.

El ReaderWriterLockSlim objeto se ha eliminado.

Ejemplos

En el ejemplo siguiente se muestra cómo usar el EnterReadLock método para introducir el bloqueo en modo de lectura. El método que se muestra en el ejemplo recupera el valor asociado a una clave. Si no se encuentra la clave, se permite que la excepción producida por el elemento interno Dictionary<TKey,TValue> finalice el método. Se usa un finally bloque para ejecutar el ExitReadLock método , asegurándose de que el autor de la llamada sale del modo de lectura.

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 string Read(int key)
{
    cacheLock.EnterReadLock();
    try
    {
        return innerCache[key];
    }
    finally
    {
        cacheLock.ExitReadLock();
    }
}
Public Function Read(ByVal key As Integer) As String
    cacheLock.EnterReadLock()
    Try
        Return innerCache(key)
    Finally
        cacheLock.ExitReadLock()
    End Try
End Function

Comentarios

Este método se bloquea hasta que el subproceso que realiza la llamada entra en el bloqueo y, por tanto, es posible que nunca vuelva. Use el TryEnterReadLock método para bloquear un intervalo especificado y, a continuación, devuelva si el subproceso que realiza la llamada no ha entrado en modo de lectura durante ese intervalo.

Varios subprocesos pueden entrar en modo de lectura al mismo tiempo.

Si uno o varios subprocesos están esperando entrar en modo de escritura, un subproceso que llama al EnterReadLock método bloquea hasta que esos subprocesos hayan agotado el tiempo de espera o especificado el modo de escritura y, a continuación, salgan de él.

Note

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

Como máximo, un subproceso puede estar en modo actualizable mientras que otros subprocesos están en modo de lectura. Si hay subprocesos adicionales a la espera de entrar en modo actualizable y no hay ningún subproceso esperando entrar en modo de escritura, los subprocesos que llaman al EnterReadLock método entran en modo de lectura inmediatamente y no se bloquean.

Se aplica a