ReaderWriterLockSlim.TryEnterWriteLock Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Próbuje wprowadzić blokadę w trybie zapisu z opcjonalnym limitem czasu.
Przeciążenia
| Nazwa | Opis |
|---|---|
| TryEnterWriteLock(Int32) |
Próbuje wprowadzić blokadę w trybie zapisu z opcjonalnym limitem czasu. |
| TryEnterWriteLock(TimeSpan) |
Próbuje wprowadzić blokadę w trybie zapisu z opcjonalnym limitem czasu. |
TryEnterWriteLock(Int32)
Próbuje wprowadzić blokadę w trybie zapisu z opcjonalnym limitem czasu.
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
Liczba milisekund oczekiwania lub -1 (Infinite) oczekiwania na czas nieokreślony.
Zwraca
true jeśli wątek wywołujący wprowadził tryb zapisu, w przeciwnym razie false.
Wyjątki
Właściwość RecursionPolicy to NoRecursion i bieżący wątek już wprowadził blokadę.
— lub —
Bieżący wątek początkowo wprowadzał blokadę w trybie odczytu i dlatego próba wprowadzenia trybu zapisu powodowała możliwość zakleszczenia.
— lub —
Liczba rekursji przekroczy pojemność licznika. Limit jest tak duży, że aplikacje nigdy nie powinny go napotkać.
Wartość jest ujemna millisecondsTimeout , ale nie jest równa Infinite (-1), która jest jedyną dozwoloną wartością ujemną.
Obiekt ReaderWriterLockSlim został usunięty.
Przykłady
W poniższym przykładzie pokazano, jak za pomocą TryEnterWriteLock metody wprowadzić blokadę w trybie zapisu z przekroczeniem limitu czasu. Metoda pokazana w przykładzie dodaje nową parę klucz/wartość do zsynchronizowanej pamięci podręcznej. Jeśli określony interwał limitu czasu upłynie przed wejściem wątku do blokady, metoda zwraca falsewartość . Metoda zwraca true wartość, jeśli zostanie dodana para klucz/wartość.
Jeśli klucz znajduje się już w pamięci podręcznej, wyjątek zgłoszony przez wewnętrzny Dictionary<TKey,TValue> może zakończyć metodę. Blok finally jest używany do wykonania ExitWriteLock metody, zapewniając, że obiekt wywołujący zamyka blokadę.
Ten kod jest częścią większego przykładu udostępnionego ReaderWriterLockSlim dla klasy .
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
Uwagi
Jeśli millisecondsTimeout wartość to 0 (zero), ta metoda sprawdza stan blokady i zwraca false natychmiast, jeśli żądany stan jest niedostępny.
Jeśli inne wątki zostały wprowadzone w trybie odczytu, wątek, który wywołuje TryEnterWriteLock bloki metody, dopóki te wątki nie zakończą trybu odczytu lub do czasu upływu interwału przekroczenia limitu czasu. Podczas gdy wątki oczekują na wejście w tryb zapisu, dodatkowe wątki, które próbują wejść w tryb odczytu lub bloku trybu uaktualniania, dopóki wszystkie wątki oczekujące na wejście w tryb zapisu upłynął lub wszedł do trybu zapisu, a następnie wyszedł z niego.
Note
Jeśli blokada zezwala na rekursję, wątek, który wprowadził blokadę w trybie zapisu, może przechodzić w tryb zapisu rekursywnie, nawet jeśli inne wątki czekają na wejście w tryb zapisu.
Dotyczy
TryEnterWriteLock(TimeSpan)
Próbuje wprowadzić blokadę w trybie zapisu z opcjonalnym limitem czasu.
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
Interwał oczekiwania lub -1 milisekund oczekiwania na czas nieokreślony.
Zwraca
true jeśli wątek wywołujący wprowadził tryb zapisu, w przeciwnym razie false.
Wyjątki
Właściwość RecursionPolicy to NoRecursion i bieżący wątek już wprowadził blokadę.
— lub —
Bieżący wątek początkowo wprowadzał blokadę w trybie odczytu i dlatego próba wprowadzenia trybu zapisu powodowała możliwość zakleszczenia.
— lub —
Liczba rekursji przekroczy pojemność licznika. Limit jest tak duży, że aplikacje nigdy nie powinny go napotkać.
Wartość timeout jest ujemna, ale nie jest równa -1 milisekund, która jest jedyną dozwoloną wartością ujemną.
— lub —
Wartość parametru timeout jest większa niż liczba milisekund Int32.MaxValue .
Obiekt ReaderWriterLockSlim został usunięty.
Uwagi
Jeśli timeout wartość to 0 (zero), ta metoda sprawdza stan blokady i zwraca false natychmiast, jeśli żądany stan jest niedostępny.
Jeśli inne wątki zostały wprowadzone w trybie odczytu, wątek, który wywołuje TryEnterWriteLock bloki metody, dopóki te wątki nie zakończą trybu odczytu lub do czasu upływu interwału przekroczenia limitu czasu. Podczas gdy wątki oczekują na wejście w tryb zapisu, dodatkowe wątki, które próbują wejść w tryb odczytu lub bloku trybu uaktualniania, dopóki wszystkie wątki oczekujące na wejście w tryb zapisu upłynął lub wszedł do trybu zapisu, a następnie wyszedł z niego.
Note
Jeśli blokada zezwala na rekursję, wątek, który wprowadził blokadę w trybie zapisu, może przechodzić w tryb zapisu rekursywnie, nawet jeśli inne wątki czekają na wejście w tryb zapisu.