語言

RouteCollection.GetReadLock 方法

定義

當您從集合擷取物件時,提供用於管理線程安全性的物件。

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給 。

適用於

另請參閱