Sdílet prostřednictvím


RouteCollection.GetReadLock Metoda

Definice

Poskytuje objekt pro správu zabezpečení vláken při načítání objektu z kolekce.

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

Návraty

Objekt, který spravuje zabezpečení vlákna.

Příklady

Následující příklad ukazuje, jak použít metodu GetReadLock při načtení trasy, když je aplikace spuštěná. Příkaz Using zajistí, že bez ohledu na to, co se stane za běhu při čtení z kolekce (jestli se kód dokončí normálně nebo je vyvoláno výjimka), bude zámek bezpečně uvolněn na konci Using bloku kódu.

Poznámky

Objekt RouteCollection je k dispozici pro více procesů v aplikaci. Proto pokud potřebujete načíst trasu, když je aplikace spuštěná, použijte metodu GetReadLock k zajištění bezpečnosti vláken. Získáním zámku čtení v kolekci tras se ujistěte, že kolekce nebude při pokusu o načtení změněna.

Metoda GetReadLock zastaví pokračování vlákna, dokud nebude možné získat zámek. Pokud je zámek zápisu na místě, vlákno počká, dokud se aktualizace nedokončí a zámek zápisu se uvolní. Zámek čtení v kolekci tras je uvolněn při odstranění objektu IDisposable , který je vrácen touto metodou.

Pokud nepoužíváte GetReadLock, může se při čtení RouteCollection kolekce zobrazit chyba. Předpokládejme například, že procházíte objekty v RouteCollection kolekci, abyste je přečetli, aniž byste volali GetReadLock. Zatímco to provádíte, jiné vlákno z jiného požadavku může volat GetWriteLock a přidat trasu do kolekce. První vlákno pak selže s chybou.

Existují dva scénáře, ve kterých nemusíte volat GetReadLock:

  • Veřejné metody RouteCollection třídy, například GetVirtualPath a GetRouteData volají GetReadLock interně. Proto není nutné explicitně volat GetReadLock při volání veřejné metody RouteCollection třídy pro načtení dat z kolekce.

  • Když se aplikace spouští a ještě nezpracovává požadavky, například v obslužné rutině Application_Start události, je spuštěné pouze jedno vlákno. Vzhledem k tomu, že neexistují žádná další vlákna, která by mohla aktualizovat kolekci během čtení, nemusíte volat GetReadLock.

Platí pro

Viz také