RouteCollection.GetReadLock 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供物件,以便您從集合中擷取物件時用於管理執行緒安全性。
public:
IDisposable ^ GetReadLock();
public IDisposable GetReadLock ();
member this.GetReadLock : unit -> IDisposable
Public Function GetReadLock () As IDisposable
傳回
管理執行緒安全性的物件。
範例
下列範例示範如何在應用程式執行時擷取路由時使用 GetReadLock 方法。 Using
語句可確保不論當您從集合讀取時會發生什麼情況, (程式碼是否正常完成或擲回例外狀況,) 鎖定會在程式碼區塊結尾 Using
安全地釋放。
備註
物件 RouteCollection 可供應用程式中的多個進程使用。 因此,如果您必須在應用程式執行時擷取路由,請使用 GetReadLock 方法來保證執行緒安全。 藉由取得路由集合的讀取鎖定,您確定當您嘗試擷取集合時,將不會修改集合。
方法 GetReadLock 會停止執行緒繼續,直到取得鎖定為止。 如果已就緒寫入鎖定,執行緒會等到更新完成並釋放寫入鎖定為止。 處置這個方法所傳回的物件時 IDisposable ,會釋放路由集合上的讀取鎖定。
如果您未使用 GetReadLock ,則在閱讀 RouteCollection 集合時可能會收到錯誤。 例如,假設您迴圈查看集合中的 RouteCollection 物件來讀取它們,而不呼叫 GetReadLock 。 當您這樣做時,來自另一個要求的另一個執行緒可能會呼叫 GetWriteLock 並將路由新增至集合。 第一個執行緒接著會失敗,並出現錯誤。
您不需要呼叫 GetReadLock 的案例有兩種:
類別的 RouteCollection 公用方法,例如 GetVirtualPath 和 GetRouteData 在內部呼叫 GetReadLock 。 因此,當您呼叫 類別的 RouteCollection 公用方法以從集合擷取資料時,您不需要明確呼叫 GetReadLock 。
當應用程式正在啟動且尚未處理要求時,例如在事件處理常式中
Application_Start
,只有一個執行緒正在執行。 因為讀取集合時沒有其他可能會更新集合的執行緒,所以您不需要呼叫 GetReadLock 。