通常我有一个静态类可以读写 HttpContext.Current.Cache
但是自从在我的项目中添加了线程后,当尝试检索此对象时,所有线程都会收到空引用异常。
是否有其他访问该对象的方法、解决方法或其他缓存可以使用?
System.Web.Cache
对象本身是线程安全的。
问题在于如何以一种适用于整个应用程序的方式获取对它的引用。除非在处理 ASP.NET 请求的线程上调用它,否则 HttpContext.Current
将返回 null。获取 Cache
的另一种方法是通过静态属性 System.Web.HttpRuntime.Cache
。这将避免使用 HttpContext
带来的问题。
System.Web.Caching.Cache
是线程安全的。这里不需要lock
。 - AaronaughtHttpContext.Current
是线程本地的且只读,所以基本上它是线程安全的,尽管如下二进制编码器指出的那样,它也是错误的。HttpRuntime.Cache
同样是线程安全的,但它是全局可访问的;它没有同步,但它也是不可变的,因此您不需要使用任何显式锁定。实际上,ASP.NET 的HttpContext.Cache
只是对HttpRuntime.Cache
的一个引用,因此它必须是线程安全的,否则 ASP.NET 请求将会不断互相冲突。 - Aaronaught