RouteCollection.GetReadLock Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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
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.