查看代码仅锁定写入,而不是读取。
public void Lock()
{
this._lock.AcquireWrite();
}
public void UnLock()
{
this._lock.ReleaseWrite();
}
public object this[string name]
{
get
{
return this.Get(name);
}
set
{
// here is the effect on the lock
this.Set(name, value);
}
}
public void Set(string name, object value)
{
this._lock.AcquireWrite();
try
{
base.BaseSet(name, value);
}
finally
{
this._lock.ReleaseWrite();
}
}
public object Get(string name)
{
object obj2 = null;
this._lock.AcquireRead();
try
{
obj2 = base.BaseGet(name);
}
finally
{
this._lock.ReleaseRead();
}
return obj2;
}
写入和读取是线程安全的,这意味着已准备好锁定机制。因此,如果您进行读取数据的循环,则可以将其锁定在外部以防止其他破坏列表。
阅读这个答案也很好:Using static variables instead of Application state in ASP.NET
最好避免使用应用程序来存储数据,并直接使用带有锁定机制的静态成员,因为首先MS建议这样做,其次因为对应用程序静态数据的读/写是调用每次访问的锁定数据。