Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo ReaderWriterLockSlim.TryEnterWriteLock (Int32)

 

Data di pubblicazione: ottobre 2016

Prova ad attivare il blocco in modalità scrittura con un timeout facoltativo.

Spazio dei nomi:   System.Threading
Assembly:  System.Core (in System.Core.dll)

public bool TryEnterWriteLock(
	int millisecondsTimeout
)

Parametri

millisecondsTimeout
Type: System.Int32

Numero di millisecondi di attesa oppure -1 (Timeout.Infinite) per un'attesa indefinita.

Valore restituito

Type: System.Boolean

true se il thread chiamante è passato in modalità scrittura; in caso contrario, false.

Exception Condition
LockRecursionException

Il RecursionPolicy è LockRecursionPolicy.NoRecursion e il thread corrente è già stato attivato il blocco.

-oppure-

Il thread corrente immesso inizialmente il blocco in modalità di lettura e pertanto il tentativo di attivare la modalità di scrittura creerebbe la possibilità di un deadlock.

-oppure-

Il numero di ricorsioni supererebbe la capacità del contatore. Il limite è talmente grande che le applicazioni non dovrebbero mai raggiungerlo.

ArgumentOutOfRangeException

Il valore di millisecondsTimeout è negativo, ma non è uguale a Timeout.Infinite (-1), che è l'unico valore negativo consentito.

ObjectDisposedException

L'oggetto ReaderWriterLockSlim è stato eliminato.

Se millisecondsTimeout è 0 (zero), questo metodo controlla lo stato di blocco e restituisce false immediatamente se lo stato desiderato non è disponibile.

Se altri thread è stato attivato il blocco in modalità lettura, un thread che chiama il TryEnterWriteLock metodo si blocca fino a quando tali thread sono usciti dal modalità lettura o è trascorso l'intervallo di timeout. Mentre i thread sono bloccati in attesa di attivazione della modalità scrittura, gli altri thread che tentano di accedere alla modalità di lettura o in modalità aggiornabile bloccata fino a quando tutti i thread in attesa di accedere alla modalità di scrittura sia scaduta o immesso modalità di scrittura e uscire da esso.

System_CAPS_noteNota

Se un blocco consente la ricorsione, un thread che ha attivato il blocco in modalità di scrittura può accedere in modo ricorsivo la modalità di scrittura, anche se altri thread in attesa di attivazione della modalità scrittura.

Nell'esempio seguente viene illustrato come utilizzare il TryEnterWriteLock metodo per attivare il blocco in modalità scrittura con un timeout. Il metodo illustrato nell'esempio aggiunge una nuova coppia chiave/valore per la cache sincronizzata. Se l'intervallo di timeout specificato scade prima che il thread venga inserito il blocco, il metodo restituisce false. Il metodo restituisce true Se si aggiunge la coppia chiave/valore.

Se la chiave esiste già nella cache, l'eccezione generata dall'oggetto interno Dictionary<TKey, TValue> può terminare il metodo. Oggetto finally blocco viene utilizzato per eseguire il ExitWriteLock metodo, assicurando che il chiamante viene chiuso il blocco.

Questo codice è parte di un esempio più esaustivo fornito per la ReaderWriterLockSlim classe.

private ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim();
private Dictionary<int, string> innerCache = new Dictionary<int, 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;
    }
}

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 3.5
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Windows Phone Silverlight
Disponibile da 8.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: