共用方式為


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

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

適用於

另請參閱