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 ,例如 GetVirtualPath ,并在 GetRouteData 内部调用 GetReadLock 。 因此,调用类的公共方法RouteCollection从集合中检索数据时,无需显式调用GetReadLock

  • 当应用程序启动且尚未处理请求(例如在事件处理程序中 Application_Start ),仅运行一个线程。 由于在读取集合时没有其他线程可能会更新该集合,因此无需调用 GetReadLock

适用于

另请参阅