【发布时间】:2011-01-27 01:24:41
【问题描述】:
通常我有一个静态类读写HttpContext.Current.Cache
但是,自从向我的项目添加线程后,线程在尝试检索此对象时都会出现空引用异常。
有没有其他方法可以访问它、解决方法或我可以使用的其他缓存?
【问题讨论】:
-
它不是线程安全的。查看你最喜欢的 C# 编程书籍中的 lock 关键字。
-
“自从添加线程”到底是什么意思?
-
@nobugz:
System.Web.Caching.Cache是线程安全的。这里不需要lock。 -
@aaro: 属性是线程安全的吗?看起来不像。
-
@nobugz:
HttpContext.Current是线程本地和只读的,所以基本上,是的,它是线程安全的,尽管由于下面 binarycoder 指出的原因它也是错误的。HttpRuntime.Cache是相同的,但可以全局访问;它不是同步的,但它也是不可变的,因此您不需要使用任何显式锁。实际上,ASP.NETHttpContext.Cache只是对HttpRuntime.Cache的引用,所以它必须是线程安全的,否则 ASP.NET 请求会不断相互挤压。