ReaderWriterLockSlim.TryEnterWriteLock 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à scrittura, con un timeout facoltativo.
Overload
| Nome | Descrizione |
|---|---|
| TryEnterWriteLock(Int32) |
Prova a immettere il blocco in modalità scrittura, con un timeout facoltativo. |
| TryEnterWriteLock(TimeSpan) |
Prova a immettere il blocco in modalità scrittura, con un timeout facoltativo. |
TryEnterWriteLock(Int32)
Prova a immettere il blocco in modalità scrittura, con un timeout facoltativo.
public:
bool TryEnterWriteLock(int millisecondsTimeout);
public bool TryEnterWriteLock(int millisecondsTimeout);
member this.TryEnterWriteLock : int -> bool
Public Function TryEnterWriteLock (millisecondsTimeout As Integer) As Boolean
Parametri
Valori restituiti
true se il thread chiamante è entrato in modalità di scrittura; in caso contrario, false.
Eccezioni
La RecursionPolicy proprietà è NoRecursion e il thread corrente ha già immesso il blocco.
oppure
Il thread corrente ha inizialmente immesso il blocco in modalità di lettura e quindi il tentativo di attivare la modalità di scrittura creerebbe la possibilità di un deadlock.
oppure
Il numero di ricorsione supera la capacità del contatore. Il limite è così elevato che le applicazioni non devono mai incontrarlo.
Il valore di millisecondsTimeout è negativo, ma non è uguale a Infinite (-1), che è l'unico valore negativo consentito.
L'oggetto ReaderWriterLockSlim è stato eliminato.
Esempio
Nell'esempio seguente viene illustrato come usare il metodo per immettere il TryEnterWriteLock blocco in modalità di scrittura, con un timeout. Il metodo illustrato nell'esempio aggiunge una nuova coppia chiave/valore alla cache sincronizzata. Se l'intervallo di timeout specificato scade prima che il thread entri nel blocco, il metodo restituisce false. Il metodo restituisce true se viene aggiunta la coppia chiave/valore.
Se la chiave è già presente nella cache, l'eccezione generata dall'interno Dictionary<TKey,TValue> può terminare il metodo . Viene usato un finally blocco per eseguire il ExitWriteLock metodo, assicurandosi che il chiamante esce dal blocco.
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 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
Commenti
Se millisecondsTimeout è 0 (zero), questo metodo controlla lo stato di blocco e restituisce false immediatamente se lo stato desiderato non è disponibile.
Se altri thread hanno immesso il blocco in modalità di lettura, un thread che chiama i blocchi del TryEnterWriteLock metodo fino a quando tali thread non hanno terminato la modalità di lettura o fino a quando non è trascorso l'intervallo di timeout. Mentre i thread sono bloccati in attesa di entrare in modalità di scrittura, altri thread che tentano di accedere alla modalità di lettura o alla modalità aggiornabile fino a quando tutti i thread in attesa di attivare la modalità di scrittura hanno timeout o immesso la modalità di scrittura e quindi sono stati chiusi da esso.
Note
Se un blocco consente la ricorsione, un thread che ha immesso il blocco in modalità di scrittura può entrare in modalità di scrittura in modo ricorsivo, anche se altri thread sono in attesa di attivare la modalità di scrittura.
Si applica a
TryEnterWriteLock(TimeSpan)
Prova a immettere il blocco in modalità scrittura, con un timeout facoltativo.
public:
bool TryEnterWriteLock(TimeSpan timeout);
public bool TryEnterWriteLock(TimeSpan timeout);
member this.TryEnterWriteLock : TimeSpan -> bool
Public Function TryEnterWriteLock (timeout As TimeSpan) As Boolean
Parametri
- timeout
- TimeSpan
Intervallo di attesa o -1 millisecondi di attesa illimitata.
Valori restituiti
true se il thread chiamante è entrato in modalità di scrittura; in caso contrario, false.
Eccezioni
La RecursionPolicy proprietà è NoRecursion e il thread corrente ha già immesso il blocco.
oppure
Il thread corrente ha inizialmente immesso il blocco in modalità di lettura e quindi il tentativo di attivare la modalità di scrittura creerebbe la possibilità di un deadlock.
oppure
Il numero di ricorsione supera la capacità del contatore. Il limite è così elevato che le applicazioni non devono mai incontrarlo.
Il valore di timeout è negativo, ma non è uguale a -1 millisecondi, ovvero l'unico valore negativo consentito.
oppure
Il valore di è maggiore di timeoutInt32.MaxValue millisecondi.
L'oggetto ReaderWriterLockSlim è stato eliminato.
Commenti
Se timeout è 0 (zero), questo metodo controlla lo stato di blocco e restituisce false immediatamente se lo stato desiderato non è disponibile.
Se altri thread hanno immesso il blocco in modalità di lettura, un thread che chiama i blocchi del TryEnterWriteLock metodo fino a quando tali thread non hanno terminato la modalità di lettura o fino a quando non è trascorso l'intervallo di timeout. Mentre i thread sono bloccati in attesa di entrare in modalità di scrittura, altri thread che tentano di accedere alla modalità di lettura o alla modalità aggiornabile fino a quando tutti i thread in attesa di attivare la modalità di scrittura hanno timeout o immesso la modalità di scrittura e quindi sono stati chiusi da esso.
Note
Se un blocco consente la ricorsione, un thread che ha immesso il blocco in modalità di scrittura può entrare in modalità di scrittura in modo ricorsivo, anche se altri thread sono in attesa di attivare la modalità di scrittura.