我不得不将数据集存储在缓存中,以便X min,并且当它到期时,我拥有它,以便下一个请求将检查缓存是否存在,然后进入并提取更新数据并设置缓存。问题在于另一个用户此时会进来并尝试访问该对象并导致异常被抛出。我如何防止这种情况发生?C#问题,试图访问缓存对象的多个用户
回答
您可以使用C#中的锁定语句来执行此操作。
您需要一个用作“锁定”的对象变量,因此一次只能有一个线程访问它。
锁定更新或检索缓存对象的代码。
下面是一个简单的类演示此:
public class UpdateCache
{
private static object _myLockObject;
public static void UpdateCache()
{
lock(_myLockObject)
{
.. Update cache object
}
}
public static void LoadFromCache(string key)
{
lock(_myLockObject)
{
.. retrieve data from cache
}
}
}
一种典型的花纹是封装缓存的对象中的属性。属性getter可以控制对缓存对象的所有访问。
private static object _locker = new object();
public static DataSet CachedDataSet
{
get
{
if (Cache["DataSetKey"] == null)
{
lock (_locker)
{
if (Cache["DataSetKey"] == null)
{
Cache["DataSetKey"] = CreateAndFillDataSet();
}
}
}
return (DataSet) Cache["DataSetKey"];
}
}
这段代码不会编译,getter没有任何回报。 – 2009-10-01 03:33:43
downvote(不是我的)虽然有点苛刻,显然有点过分 – 2009-10-01 03:34:35
等待私人对象不应该是静态的吗? – BlackTea 2009-10-01 03:37:06
请张贴破解的代码。 – 2009-10-01 03:20:14