ReaderWriterLockSlim.TryEnterWriteLock Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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á.
Objekt ReaderWriterLockSlim byl odstraněn.
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.
Objekt ReaderWriterLockSlim byl odstraněn.
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.