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 。 因此,當你呼叫類別的GetReadLock公開方法來擷取集合資料時,不必明確呼叫RouteCollection。
當應用程式啟動且尚未處理請求時,例如事件
Application_Start處理程序中,只有一個執行緒在執行。 因為在你閱讀時沒有其他討論串可能會更新合集,所以你不必打電話 GetReadLock給 。