RouteCollection.GetReadLock Metod

Definition

Tillhandahåller ett objekt för hantering av trådsäkerhet när du hämtar ett objekt från samlingen.

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

Returer

Ett objekt som hanterar trådsäkerhet.

Exempel

I följande exempel visas hur du använder GetReadLock metoden när du hämtar en väg medan programmet körs. -instruktionen Using ser till att låset släpps på ett säkert sätt i slutet av kodblocket Using oavsett vad som händer vid körning när du läser från samlingen (oavsett om koden slutförs normalt eller om ett undantag utlöses).

Kommentarer

Objektet RouteCollection är tillgängligt för flera processer i programmet. Om du måste hämta en väg när programmet körs använder GetReadLock du därför metoden för att garantera trådsäkerheten. Genom att hämta ett läslås på vägsamlingen ser du till att samlingen inte ändras när du försöker hämta den.

Metoden GetReadLock hindrar tråden från att fortsätta tills låset kan hämtas. Om ett skrivlås är på plats väntar tråden tills uppdateringen har slutförts och skrivlåset släpps. Läslåset på vägsamlingen släpps när objektet IDisposable som returneras av den här metoden tas bort.

Om du inte använder GetReadLockkan du få ett fel när du läser igenom RouteCollection samlingen. Anta till exempel att du loopar igenom objekten RouteCollection i samlingen för att läsa dem, utan att anropa GetReadLock. När du gör det kan en annan tråd från en annan begäran anropa GetWriteLock och lägga till en väg till samlingen. Den första tråden misslyckas sedan med ett fel.

Det finns två scenarier där du inte behöver anropa GetReadLock:

  • Offentliga metoder för RouteCollection klassen, till exempel GetVirtualPath och GetRouteData anropa GetReadLock internt. Därför behöver du inte uttryckligen anropa GetReadLock när du anropar en offentlig metod för RouteCollection klassen för att hämta data från samlingen.

  • När programmet startas och ännu inte bearbetar begäranden, till exempel i Application_Start händelsehanteraren, körs bara en tråd. Eftersom det inte finns några andra trådar som kan uppdatera samlingen när du läser den behöver du inte anropa GetReadLock.

Gäller för

Se även