ReaderWriterLockSlim.TryEnterWriteLock Metoda

Definice

Pokusí se přejít na zámek v režimu zápisu s volitelným časovým limitem.

Přetížení

Name Description
TryEnterWriteLock(Int32)

Pokusí se přejít na zámek v režimu zápisu s volitelným časovým limitem.

TryEnterWriteLock(TimeSpan)

Pokusí se přejít na zámek v režimu zápisu s volitelným časovým limitem.

TryEnterWriteLock(Int32)

Zdroj:
ReaderWriterLockSlim.cs
Zdroj:
ReaderWriterLockSlim.cs
Zdroj:
ReaderWriterLockSlim.cs
Zdroj:
ReaderWriterLockSlim.cs
Zdroj:
ReaderWriterLockSlim.cs

Pokusí se přejít na zámek v režimu zápisu s volitelným časovým limitem.

public:
 bool TryEnterWriteLock(int millisecondsTimeout);
public bool TryEnterWriteLock(int millisecondsTimeout);
member this.TryEnterWriteLock : int -> bool
Public Function TryEnterWriteLock (millisecondsTimeout As Integer) As Boolean

Parametry

millisecondsTimeout
Int32

Počet milisekund, které se mají počkat, nebo -1 (Infinite) na neomezenou dobu.

Návraty

true pokud volající vlákno vstoupilo do režimu zápisu, jinak , false.

Výjimky

Vlastnost RecursionPolicy je NoRecursion a aktuální vlákno již bylo zadáno zámek.

nebo

Aktuální vlákno původně vstoupilo do zámku v režimu čtení, a proto pokus o vstup do režimu zápisu by vytvořil možnost zablokování.

nebo

Číslo rekurze by překročilo kapacitu čítače. Limit je tak velký, že by se na ni aplikace nikdy neměly setkat.

Hodnota je záporná millisecondsTimeout , ale nerovná se Infinite (-1), což je jediná záporná hodnota povolená.

Příklady

Následující příklad ukazuje, jak pomocí TryEnterWriteLock metody zadat zámek v režimu zápisu s časovým limitem. Metoda zobrazená v příkladu přidá do synchronizované mezipaměti novou dvojici klíč/hodnota. Pokud zadaný interval časového limitu uplyne před vstupem vlákna do zámku, metoda vrátí false. Metoda vrátí true , pokud je přidán pár klíč/hodnota.

Pokud je klíč již v mezipaměti, výjimka vyvolaná vnitřním Dictionary<TKey,TValue> objektem je povolena ukončit metodu. Blok finally se používá ke spuštění ExitWriteLock metody, čímž se zajistí, že volající zámek ukončí.

Tento kód je součástí většího příkladu poskytovaného ReaderWriterLockSlim pro třídu.

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

Poznámky

Pokud millisecondsTimeout je 0 (nula), tato metoda zkontroluje stav zámku a vrátí false okamžitě, pokud požadovaný stav není k dispozici.

Pokud jiná vlákna zadala zámek v režimu čtení, vlákno, které volá TryEnterWriteLock metody bloky, dokud tato vlákna neskončí režim čtení nebo do uplynutí časového limitu intervalu. Zatímco vlákna jsou blokována čekáním na vstup do režimu zápisu, další vlákna, která se pokusí přejít do režimu čtení nebo upgradovatelný režim blok, dokud všechna vlákna čekající na vstup do režimu zápisu buď vypršel časový limit, nebo vstoupil do režimu zápisu a poté se z něj ukončí.

Note

Pokud zámek umožňuje rekurzzi, vlákno, které zadalo zámek v režimu zápisu, může rekurzivně vstoupit do režimu zápisu, i když ostatní vlákna čekají na vstup do režimu zápisu.

Platí pro

TryEnterWriteLock(TimeSpan)

Zdroj:
ReaderWriterLockSlim.cs
Zdroj:
ReaderWriterLockSlim.cs
Zdroj:
ReaderWriterLockSlim.cs
Zdroj:
ReaderWriterLockSlim.cs
Zdroj:
ReaderWriterLockSlim.cs

Pokusí se přejít na zámek v režimu zápisu s volitelným časovým limitem.

public:
 bool TryEnterWriteLock(TimeSpan timeout);
public bool TryEnterWriteLock(TimeSpan timeout);
member this.TryEnterWriteLock : TimeSpan -> bool
Public Function TryEnterWriteLock (timeout As TimeSpan) As Boolean

Parametry

timeout
TimeSpan

Interval čekání nebo -1 milisekundy, aby se čekalo neomezeně dlouho.

Návraty

true pokud volající vlákno vstoupilo do režimu zápisu, jinak , false.

Výjimky

Vlastnost RecursionPolicy je NoRecursion a aktuální vlákno již bylo zadáno zámek.

nebo

Aktuální vlákno původně vstoupilo do zámku v režimu čtení, a proto pokus o vstup do režimu zápisu by vytvořil možnost zablokování.

nebo

Číslo rekurze by překročilo kapacitu čítače. Limit je tak velký, že by se na ni aplikace nikdy neměly setkat.

Hodnota je záporná timeout , ale nerovná se -1 milisekund, což je jediná záporná hodnota povolená.

nebo

Hodnota timeout je větší než Int32.MaxValue milisekund.

Poznámky

Pokud timeout je 0 (nula), tato metoda zkontroluje stav zámku a vrátí false okamžitě, pokud požadovaný stav není k dispozici.

Pokud jiná vlákna zadala zámek v režimu čtení, vlákno, které volá TryEnterWriteLock metody bloky, dokud tato vlákna neskončí režim čtení nebo do uplynutí časového limitu intervalu. Zatímco vlákna jsou blokována čekáním na vstup do režimu zápisu, další vlákna, která se pokusí přejít do režimu čtení nebo upgradovatelný režim blok, dokud všechna vlákna čekající na vstup do režimu zápisu buď vypršel časový limit, nebo vstoupil do režimu zápisu a poté se z něj ukončí.

Note

Pokud zámek umožňuje rekurzzi, vlákno, které zadalo zámek v režimu zápisu, může rekurzivně vstoupit do režimu zápisu, i když ostatní vlákna čekají na vstup do režimu zápisu.

Platí pro