ReaderWriterLockSlim.EnterReadLock Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Prova a immettere il blocco in modalità di lettura.
public:
void EnterReadLock();
public void EnterReadLock();
member this.EnterReadLock : unit -> unit
Public Sub EnterReadLock ()
Eccezioni
La RecursionPolicy proprietà è NoRecursione il thread corrente ha tentato di acquisire il blocco di lettura quando contiene già il blocco di lettura.
oppure
La RecursionPolicy proprietà è NoRecursione il thread corrente ha tentato di acquisire il blocco di lettura quando contiene già il blocco di scrittura.
oppure
Il numero di ricorsione supera la capacità del contatore. Questo limite è così elevato che le applicazioni non devono mai incontrare questa eccezione.
L'oggetto ReaderWriterLockSlim è stato eliminato.
Esempio
Nell'esempio seguente viene illustrato come usare il metodo per immettere il EnterReadLock blocco in modalità di lettura. Il metodo illustrato nell'esempio recupera il valore associato a una chiave. Se la chiave non viene trovata, l'eccezione generata dall'interno Dictionary<TKey,TValue> può terminare il metodo. Un finally blocco viene usato per eseguire il ExitReadLock metodo, assicurandosi che il chiamante esce dalla modalità di lettura.
Questo codice fa parte di un esempio più ampio fornito per la 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 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
Commenti
Questo metodo blocca fino a quando il thread chiamante non entra nel blocco e pertanto potrebbe non restituire mai. Utilizzare il TryEnterReadLock metodo per bloccare per un intervallo specificato e quindi restituire se il thread chiamante non è entrato in modalità di lettura durante tale intervallo.
Più thread possono entrare in modalità di lettura contemporaneamente.
Se uno o più thread sono in attesa di entrare in modalità di scrittura, un thread che chiama i blocchi del EnterReadLock metodo fino a quando tali thread non hanno superato il timeout o hanno immesso la modalità di scrittura e quindi sono usciti da esso.
Note
Se un blocco consente la ricorsione, un thread che ha immesso il blocco in modalità di lettura può entrare in modalità di lettura in modo ricorsivo, anche se altri thread sono in attesa di entrare in modalità di scrittura.
Al massimo un thread può essere in modalità aggiornabile mentre altri thread sono in modalità di lettura. Se altri thread sono in attesa di passare alla modalità aggiornabile e non ci sono thread in attesa di entrare in modalità di scrittura, i thread che chiamano il EnterReadLock metodo entrano immediatamente in modalità di lettura e non bloccano.