Udostępnij za pośrednictwem


RouteCollection.GetReadLock Metoda

Definicja

Udostępnia obiekt do zarządzania bezpieczeństwem wątków podczas pobierania obiektu z kolekcji.

public:
 IDisposable ^ GetReadLock();
public IDisposable GetReadLock ();
member this.GetReadLock : unit -> IDisposable
Public Function GetReadLock () As IDisposable

Zwraca

Obiekt, który zarządza bezpieczeństwem wątków.

Przykłady

W poniższym przykładzie pokazano, jak używać GetReadLock metody podczas pobierania trasy podczas działania aplikacji. Instrukcja Using zapewnia, że bez względu na to, co dzieje się w czasie wykonywania podczas odczytywania z kolekcji (czy kod jest wykonywany normalnie, czy jest zgłaszany wyjątek), blokada zostanie bezpiecznie zwolniona na końcu Using bloku kodu.

Uwagi

Obiekt RouteCollection jest dostępny dla wielu procesów w aplikacji. W związku z tym, jeśli musisz pobrać trasę, gdy aplikacja jest uruchomiona, użyj GetReadLock metody w celu zagwarantowania bezpieczeństwa wątków. Dzięki uzyskaniu blokady odczytu w kolekcji tras upewnij się, że kolekcja nie zostanie zmodyfikowana podczas próby jej pobrania.

Metoda GetReadLock uniemożliwia kontynuowanie wątku do momentu uzyskania blokady. Jeśli blokada zapisu jest włączona, wątek czeka na ukończenie aktualizacji i zostanie zwolniona blokada zapisu. Blokada odczytu w kolekcji tras jest zwalniana, gdy IDisposable obiekt zwracany przez tę metodę jest usuwany.

Jeśli nie używasz metody GetReadLock, podczas odczytywania kolekcji RouteCollection może wystąpić błąd. Załóżmy na przykład, że wykonujesz pętlę przez obiekty w RouteCollection kolekcji, aby je odczytać bez wywoływania metody GetReadLock. Gdy to robisz, inny wątek z innego żądania może wywołać GetWriteLock i dodać trasę do kolekcji. Pierwszy wątek zakończy się niepowodzeniem z powodu błędu.

Istnieją dwa scenariusze, w których nie trzeba wywoływać metody GetReadLock:

  • Publiczne metody RouteCollection klasy, takie jak GetVirtualPath i GetRouteData wywoływane GetReadLock wewnętrznie. W związku z tym nie trzeba jawnie wywoływać GetReadLock metody publicznej RouteCollection klasy w celu pobrania danych z kolekcji.

  • Gdy aplikacja jest uruchamiana i nie przetwarza jeszcze żądań, takich jak w Application_Start programie obsługi zdarzeń, jest uruchomiony tylko jeden wątek. Ponieważ podczas czytania kolekcji nie ma żadnych innych wątków, które mogą aktualizować kolekcję, nie trzeba wywoływać metody GetReadLock.

Dotyczy

Zobacz też