Freigeben über


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

Ein Objekt, das die Threadsicherheit verwaltet.

Beispiele

Das folgende Beispiel zeigt, 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 (unabhängig davon, ob der Code normal abgeschlossen 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 -Methode, um die GetReadLock Threadsicherheit zu gewährleisten. Wenn Sie eine Lesesperre für die Routenauflistung erhalten, stellen Sie sicher, dass die Auflistung nicht geändert wird, während Sie versuchen, sie abzurufen.

Die GetReadLock -Methode verhindert, dass der Thread fortgesetzt wird, bis die Sperre abgerufen werden kann. Wenn eine Schreibsperre eingerichtet ist, wartet der Thread, bis das Update abgeschlossen ist und die Schreibsperre aufgehoben wird. Die Lesesperre für die Routingauflistung wird freigegeben, wenn das IDisposable von dieser Methode zurückgegebene Objekt verworfen wird.

Wenn Sie nicht verwenden GetReadLock, erhalten Sie möglicherweise eine Fehlermeldung, während Sie die RouteCollection Sammlung lesen. Angenommen, Sie durchlaufen die Objekte in der RouteCollection Auflistung, um sie zu lesen, ohne aufzurufen GetReadLock. Während sie dies tun, kann ein anderer Thread aus einer anderen Anforderung aufrufen GetWriteLock und der Sammlung eine Route hinzufügen. 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 und GetRouteData rufen intern auf GetReadLock . Daher müssen Sie nicht explizit aufrufen GetReadLock , wenn Sie eine öffentliche Methode der RouteCollection -Klasse aufrufen, um Daten aus der Sammlung abzurufen.

  • Wenn die Anwendung startet 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 sie lesen, müssen Sie nicht aufrufen GetReadLock.

Gilt für:

Weitere Informationen