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 ad attivare il blocco in modalità scrittura con un timeout facoltativo.
Overload
TryEnterWriteLock(Int32) |
Prova ad attivare il blocco in modalità scrittura con un timeout facoltativo. |
TryEnterWriteLock(TimeSpan) |
Prova ad attivare il blocco in modalità scrittura con un timeout facoltativo. |
TryEnterWriteLock(Int32)
- Origine:
- ReaderWriterLockSlim.cs
- Origine:
- ReaderWriterLockSlim.cs
- Origine:
- ReaderWriterLockSlim.cs
Prova ad attivare 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
- millisecondsTimeout
- Int32
Numero di millisecondi di attesa oppure -1 (Infinite) per un'attesa indefinita.
Restituisce
true
se il thread chiamante ha acceduto alla modalità di scrittura; in caso contrario, false
.
Eccezioni
La proprietà RecursionPolicy è NoRecursion e il thread corrente ha già acceduto al blocco.
-oppure-
Il thread corrente ha inizialmente acceduto al blocco in modalità di lettura, pertanto il tentativo di accedere alla modalità di scrittura creerebbe la possibilità di un deadlock.
-oppure-
Il numero di ricorsioni supererebbe la capacità del contatore. Il limite è talmente elevato che le applicazioni non dovrebbero mai raggiungerlo.
Il valore di millisecondsTimeout
è negativo, ma non è uguale a Infinite (-1), ovvero 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 viene trascorso 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> è consentita per terminare il metodo. Un finally
blocco viene usato per eseguire il ExitWriteLock metodo, assicurandosi che il chiamante esca dal blocco.
Questo codice fa parte di un esempio più grande 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 chiuso la modalità di lettura o fino a quando l'intervallo di timeout è trascorso. Mentre i thread sono bloccati in attesa di immettere la modalità di scrittura, i thread aggiuntivi che tentano di immettere la modalità di lettura o il blocco in modalità aggiornabile fino a quando tutti i thread in attesa di immettere la modalità di scrittura hanno timeout o immesso in modalità di scrittura e quindi sono usciti da esso.
Nota
Se un blocco consente la ricorsione, un thread che ha immesso il blocco in modalità di scrittura può immettere la modalità di scrittura ricorsivamente, anche se altri thread sono in attesa di immettere la modalità di scrittura.
Si applica a
TryEnterWriteLock(TimeSpan)
- Origine:
- ReaderWriterLockSlim.cs
- Origine:
- ReaderWriterLockSlim.cs
- Origine:
- ReaderWriterLockSlim.cs
Prova ad attivare 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 oppure -1 millisecondi per un'attesa indefinita.
Restituisce
true
se il thread chiamante ha acceduto alla modalità di scrittura; in caso contrario, false
.
Eccezioni
La proprietà RecursionPolicy è NoRecursion e il thread corrente ha già acceduto al blocco.
-oppure-
Il thread corrente ha inizialmente acceduto al blocco in modalità di lettura, pertanto il tentativo di accedere alla modalità di scrittura creerebbe la possibilità di un deadlock.
-oppure-
Il numero di ricorsioni supererebbe la capacità del contatore. Il limite è talmente elevato che le applicazioni non dovrebbero mai raggiungerlo.
Il valore di timeout
è negativo, ma non è uguale a -1 millisecondi, ovvero l'unico valore negativo consentito.
-oppure-
Il valore di è maggiore di timeout
Int32.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 chiuso la modalità di lettura o fino a quando l'intervallo di timeout è trascorso. Mentre i thread sono bloccati in attesa di immettere la modalità di scrittura, i thread aggiuntivi che tentano di immettere la modalità di lettura o il blocco in modalità aggiornabile fino a quando tutti i thread in attesa di immettere la modalità di scrittura hanno timeout o immesso in modalità di scrittura e quindi sono usciti da esso.
Nota
Se un blocco consente la ricorsione, un thread che ha immesso il blocco in modalità di scrittura può immettere la modalità di scrittura ricorsivamente, anche se altri thread sono in attesa di immettere la modalità di scrittura.