ReaderWriterLockSlim.TryEnterWriteLock Metodo

Definizione

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)

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)

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 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 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