Sdílet prostřednictvím


RouteCollection.GetReadLock Metoda

Definice

Poskytuje objekt pro správu zabezpečení vlákna při načtení objektu z kolekce.

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

Návraty

IDisposable

Objekt, který spravuje bezpečnost vláken.

Příklady

Následující příklad ukazuje, jak použít metodu GetReadLock při načtení trasy při 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), bude zámek bezpečně vydá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 při spuštění aplikace, 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 se kolekce během načítání nezmění.

Metoda GetReadLock zastaví pokračování vlákna, dokud se zámek nedá získat. Pokud je zámek zápisu na místě, vlákno čeká, dokud se aktualizace nedokončí a zámek zápisu se uvolní. Zámek čtení v kolekci tras se uvolní, když IDisposable je objekt vrácen touto metodou.

Pokud nepoužíváte GetReadLock, může se při čtení kolekce RouteCollection 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, jako GetVirtualPath jsou 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.

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

Platí pro

Viz také