ReaderWriterLockSlim.TryEnterWriteLock Metoda

Definicja

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

millisecondsTimeout
Int32

Liczba milisekund oczekiwania lub -1 (Infinite) 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ść 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.

Dotyczy