RouteCollection.GetReadLock Methode

Definition

Stellt ein Objekt zur Verwaltung der Threadsicherheit bereit, wenn Sie ein Objekt aus der Auflistung abrufen.

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

Gibt zurück

IDisposable

Ein Objekt, das die Threadsicherheit verwaltet.

Beispiele

Im folgenden Beispiel wird gezeigt, wie Sie die GetReadLock Methode verwenden, wenn Sie eine Route abrufen, während die Anwendung ausgeführt wird. Die Using Anweisung stellt sicher, dass unabhängig davon, was zur Laufzeit geschieht, wenn Sie aus der Auflistung lesen (ob der Code normalerweise abgeschlossen wird oder eine Ausnahme ausgelöst wird), die Sperre am Ende des Using Codeblocks sicher freigegeben wird.

Hinweise

Das RouteCollection Objekt ist für mehrere Prozesse in der Anwendung verfügbar. Wenn Sie daher eine Route abrufen müssen, wenn die Anwendung ausgeführt wird, verwenden Sie die GetReadLock Methode, um die Threadsicherheit zu gewährleisten. Indem Sie eine Lesesperre für die Routesammlung erhalten, stellen Sie sicher, dass die Auflistung nicht geändert wird, während Sie versuchen, sie abzurufen.

Die GetReadLock Methode beendet den Thread, bis die Sperre erworben werden kann. Wenn eine Schreibsperre vorhanden ist, wartet der Thread, bis das Update abgeschlossen ist und die Schreibsperre freigegeben wird. Die Lesesperre für die Routesammlung wird veröffentlicht, wenn das IDisposable von dieser Methode zurückgegebene Objekt entsorgt wird.

Wenn Sie keine Verwendung verwenden GetReadLock, erhalten Sie möglicherweise einen Fehler, während Sie die RouteCollection Sammlung lesen. Angenommen, Sie durchlaufen die Objekte in der RouteCollection Auflistung, um sie zu lesen, ohne zu aufrufen GetReadLock. Während Sie das tun, wird möglicherweise ein anderer Thread aus einer anderen Anforderung aufgerufen GetWriteLock und eine Route zur Auflistung hinzugefügt. Der erste Thread schlägt dann mit einem Fehler fehl.

Es gibt zwei Szenarien, in denen Sie nicht aufrufen GetReadLockmüssen:

  • Öffentliche Methoden der RouteCollection Klasse wie GetVirtualPath z. B. und GetRouteData Aufrufen GetReadLock intern. Daher müssen Sie nicht explizit aufrufen GetReadLock , wenn Sie eine öffentliche Methode der RouteCollection Klasse aufrufen, um Daten aus der Auflistung abzurufen.

  • Wenn die Anwendung gestartet wird und noch keine Anforderungen verarbeitet, z. B. im Application_Start Ereignishandler, wird nur ein Thread ausgeführt. Da es keine anderen Threads gibt, die die Auflistung möglicherweise aktualisieren, während Sie es lesen, müssen Sie nicht aufrufen GetReadLock.

Gilt für

Siehe auch