ReaderWriterLockSlim.TryEnterWriteLock Metoda

Definicja

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.

Dotyczy