ReaderWriterLockSlim.TryEnterWriteLock Metodo

Definizione

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

millisecondsTimeout
Int32

Numero di millisecondi di attesa o -1 (Infinite) 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 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.

Si applica a