我有一个ASP.NET (4.0)网站,其中有一些独立于用户请求在服务器上运行的操作。在Web请求期间,我广泛使用缓存,并将对象保存在HttpContext.Current.Cache中。
问题是对于所有不是由用户请求引起的线程,HttpContext.Current均为null,因此无法访问Cache。
为了访问HttpContext.Current.Cache,我计划使用以下方法:
class CacheWrapper
{
public void Insert(string key, Object obj)
{
Cache cache = CacheInstance;
if (cache == null)
{
return;
}
cache.Insert(key, obj);
}
public Object Get(string key)
{
Cache cache = CacheInstance;
if (cache == null)
{
return;
}
return cache.Get(key);
}
private Cache CacheInstance
{
get
{
if (_cache == null)
{
if (HttpContext.Current == null)
{
return null;
}
lock (_lock)
{
if (_cache == null)
{
_cache = HttpContext.Current.Cache;
}
}
}
return _cache;
}
}
}
因此,在第一次向网站发出请求之前,不会应用任何缓存,但是一旦至少有一个请求被发出,HttpContext.Current.Cache的引用将被保存,所有后台服务器操作都将能够访问缓存。
问题:
我可以相信一旦获得HttpContext.Current.Cache就会始终有效吗?
非常感谢。对于这个想法的任何想法或评论都非常欢迎!