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
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)
- Źródło:
- ReaderWriterLockSlim.cs
- Źródło:
- ReaderWriterLockSlim.cs
- Źródło:
- ReaderWriterLockSlim.cs
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
Zwraca
true
jeśli wątek wywołujący wprowadził tryb zapisu, w przeciwnym razie false
.
Wyjątki
Właściwość RecursionPolicy jest NoRecursion i bieżący wątek został już wprowadzony blokada.
-lub-
Bieżący wątek początkowo wprowadził blokadę w trybie odczytu i dlatego próba wprowadzenia trybu zapisu stworzy możliwość zakleszczenia.
-lub-
Liczba rekursji przekroczy pojemność licznika. Limit jest tak duży, że aplikacje nigdy nie powinny go napotkać.
Wartość jest millisecondsTimeout
ujemna, 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 używać TryEnterWriteLock metody do wprowadzania blokady 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łynął przed wejściem wątku do blokady, metoda zwraca wartość false
. Metoda zwraca wartość true
, 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
służy do wykonywania 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 wprowadziły blokadę 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 są blokowane oczekujące 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ął limit czasu lub wprowadzono tryb zapisu, a następnie zakończą się z niego.
Uwaga
Jeśli blokada zezwala na rekursję, wątek, który wprowadził blokadę w trybie zapisu, może przechodzić w tryb zapisu cyklicznie, nawet jeśli inne wątki czekają na tryb zapisu.
Dotyczy
TryEnterWriteLock(TimeSpan)
- Źródło:
- ReaderWriterLockSlim.cs
- Źródło:
- ReaderWriterLockSlim.cs
- Źródło:
- ReaderWriterLockSlim.cs
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 milisekundy 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 jest NoRecursion i bieżący wątek został już wprowadzony blokada.
-lub-
Bieżący wątek początkowo wprowadził blokadę w trybie odczytu i dlatego próba wprowadzenia trybu zapisu stworzy 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 milisekundom, która jest jedyną dozwoloną wartością ujemną.
-lub-
Wartość jest timeout
większa niż Int32.MaxValue milisekund.
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 wprowadziły blokadę 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 są blokowane oczekujące 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ął limit czasu lub wprowadzono tryb zapisu, a następnie zakończą się z niego.
Uwaga
Jeśli blokada zezwala na rekursję, wątek, który wprowadził blokadę w trybie zapisu, może przechodzić w tryb zapisu cyklicznie, nawet jeśli inne wątki czekają na tryb zapisu.