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

适用于

另请参阅