这可能只是一个理论问题,但我无法找到令人满意的答案。
我正在我的一个网站上使用缓存,让我思考它的数据以及何时以及是否发生变化。缓存在执行某些代码期间是否会发生变化?
以下是
的示例if (Cache["name"] != null) {
// Long and heavy code execution done here
if (Cache["name"] == null) Response.Write("Lost the data");
}
更改缓存的进程是否可以与上面的代码并行运行,还是等到它完成后呢? 理论上是否存在打印“丢失数据”的可能性?
如果是,最好先保存变量或始终检查 null 并且永远不为空?
提前致谢!
/尼古拉斯
答案 0 :(得分:4)
绝对可以。
始终从缓存中创建快照值,并使用快照:
var snapshot = Cache["name"];
if(snapshot != null) {...}
并始终使用snapshot
。说到线程,上面的通常一个理智的方法;唯一需要注意的是,您可能希望查看Interlocked
一系列方法,这些方法可让您(安全地)看到变量/字段在您不看时是否发生了变化,并且只应用了更改它没有改变。
答案 1 :(得分:0)
它肯定会过期,因此在使用之前应该检查null。正如你所说的,保存一份保存的副本是可行的。