RouteCollection.GetReadLock 方法

定義

提供物件,以便您從集合中擷取物件時用於管理執行緒安全性。

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

傳回

IDisposable

管理執行緒安全性的物件。

範例

下列範例示範如何在應用程式執行時擷取路由時使用 GetReadLock 方法。 Using語句可確保不論當您從集合讀取時會發生什麼情況, (程式碼是否正常完成或擲回例外狀況,) 鎖定會在程式碼區塊結尾 Using 安全地釋放。

備註

物件 RouteCollection 可供應用程式中的多個進程使用。 因此,如果您必須在應用程式執行時擷取路由,請使用 GetReadLock 方法來保證執行緒安全。 藉由取得路由集合的讀取鎖定,您確定當您嘗試擷取集合時,將不會修改集合。

方法 GetReadLock 會停止執行緒繼續,直到取得鎖定為止。 如果已就緒寫入鎖定,執行緒會等到更新完成並釋放寫入鎖定為止。 處置這個方法所傳回的物件時 IDisposable ,會釋放路由集合上的讀取鎖定。

如果您未使用 GetReadLock ,則在閱讀 RouteCollection 集合時可能會收到錯誤。 例如,假設您迴圈查看集合中的 RouteCollection 物件來讀取它們,而不呼叫 GetReadLock 。 當您這樣做時,來自另一個要求的另一個執行緒可能會呼叫 GetWriteLock 並將路由新增至集合。 第一個執行緒接著會失敗,並出現錯誤。

您不需要呼叫 GetReadLock 的案例有兩種:

  • 類別的 RouteCollection 公用方法,例如 GetVirtualPathGetRouteData 在內部呼叫 GetReadLock 。 因此,當您呼叫 類別的 RouteCollection 公用方法以從集合擷取資料時,您不需要明確呼叫 GetReadLock

  • 當應用程式正在啟動且尚未處理要求時,例如在事件處理常式中 Application_Start ,只有一個執行緒正在執行。 因為讀取集合時沒有其他可能會更新集合的執行緒,所以您不需要呼叫 GetReadLock

適用於

另請參閱