RouteCollection.GetReadLock Metoda

Definice

Poskytuje objekt pro správu zabezpečení vlákna 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áken.

Příklady

Následující příklad ukazuje, jak použít metodu GetReadLock při načtení trasy během spuštění aplikace. Příkaz Using zajistí, že bez ohledu na to, co se stane v době běhu při čtení z kolekce (bez ohledu na to, jestli se kód dokončí normálně nebo dojde k výjimce), zámek se bezpečně uvolní 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 při spuštění aplikace, použijte metodu GetReadLock k zajištění bezpečnosti vlákna. Získáním zámku pro čtení v kolekci tras se ujistěte, že se kolekce při pokusu o načtení nezmění.

Metoda GetReadLock zastaví, aby vlákno pokračovalo, dokud nelze získat zámek. Pokud je zámek zápisu zavedený, vlákno počká, dokud se aktualizace nedokončí a zámek zápisu se uvolní. Zámek pro čtení v kolekci tras je uvolněn, když IDisposable objekt vrácený touto metodou je uvolněn.

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 bez volání GetReadLock. Během toho může volat GetWriteLock další vlákno z jiného požadavku 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 volání GetReadLock interně. Proto nemusíte explicitně volat GetReadLock při volání veřejné metody RouteCollection třídy pro načtení dat z kolekce.

  • Při spuštění aplikace a zpracování požadavků, jako je například v obslužné rutině Application_Start události, je spuštěno pouze jedno vlákno. Vzhledem k tomu, že neexistují žádná další vlákna, která by mohla aktualizovat kolekci při čtení, nemusíte volat GetReadLock.

Platí pro

Viz také