RouteCollection.GetReadLock Methode

Definitie

Biedt een object voor het beheren van threadveiligheid wanneer u een object ophaalt uit de verzameling.

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

Retouren

Een object dat threadveiligheid beheert.

Voorbeelden

In het volgende voorbeeld ziet u hoe u de GetReadLock methode gebruikt wanneer u een route ophaalt terwijl de toepassing wordt uitgevoerd. De Using instructie zorgt ervoor dat de vergrendeling veilig wordt vrijgegeven aan het einde van het Using codeblok, ongeacht wat er tijdens de uitvoering gebeurt wanneer u leest uit de verzameling (of de code normaal is voltooid of een uitzondering wordt gegenereerd).

Opmerkingen

Het RouteCollection object is beschikbaar voor meerdere processen in de toepassing. Als u dus een route moet ophalen wanneer de toepassing wordt uitgevoerd, gebruikt u de GetReadLock methode om threadveiligheid te garanderen. Door een leesvergrendeling op de routeverzameling te verkrijgen, moet u ervoor zorgen dat de verzameling niet wordt gewijzigd terwijl u deze probeert op te halen.

De GetReadLock methode stopt de thread totdat de vergrendeling kan worden verkregen. Als er een schrijfvergrendeling is ingesteld, wacht de thread totdat de update is voltooid en de schrijfvergrendeling wordt vrijgegeven. De leesvergrendeling voor de routeverzameling wordt vrijgegeven wanneer het IDisposable object dat door deze methode wordt geretourneerd, wordt verwijderd.

Als u deze niet gebruikt GetReadLock, treedt er mogelijk een fout op tijdens het lezen van de RouteCollection verzameling. Stel dat u de objecten in de RouteCollection verzameling doorloopt om ze te lezen, zonder aan te roepen GetReadLock. Terwijl u dat doet, kan een andere thread van een andere aanvraag een route aanroepen GetWriteLock en toevoegen aan de verzameling. De eerste thread mislukt vervolgens met een fout.

Er zijn twee scenario's waarin u niet hoeft aan te roepen GetReadLock:

  • Openbare methoden van de RouteCollection klasse, zoals GetVirtualPath intern aanroepen en GetRouteData aanroepen GetReadLock . Daarom hoeft u niet expliciet aan te roepen wanneer u een openbare methode van de RouteCollection klasse aanroept GetReadLock om gegevens op te halen uit de verzameling.

  • Wanneer de toepassing wordt gestart en nog geen aanvragen verwerkt, zoals in de Application_Start gebeurtenis-handler, wordt slechts één thread uitgevoerd. Omdat er geen andere threads zijn die de verzameling kunnen bijwerken terwijl u deze leest, hoeft u niet aan te roepen GetReadLock.

Van toepassing op

Zie ook