代码执行期间缓存(或其他变量)是否会发生变化?

时间:2011-02-28 12:31:46

标签: .net caching execution

这可能只是一个理论问题,但我无法找到令人满意的答案。

我正在我的一个网站上使用缓存,让我思考它的数据以及何时以及是否发生变化。缓存在执行某些代码期间是否会发生变化?

以下是

的示例
if (Cache["name"] != null) {

    // Long and heavy code execution done here

    if (Cache["name"] == null) Response.Write("Lost the data");
}

更改缓存的进程是否可以与上面的代码并行运行,还是等到它完成后呢? 理论上是否存在打印“丢失数据”的可能性?

如果是,最好先保存变量始终检查 null 并且永远不为空

提前致谢!

/尼古拉斯

2 个答案:

答案 0 :(得分:4)

绝对可以。

始终从缓存中创建快照值,并使用快照:

var snapshot = Cache["name"];
if(snapshot != null) {...}

并始终使用snapshot。说到线程,上面的通常一个理智的方法;唯一需要注意的是,您可能希望查看Interlocked一系列方法,这些方法可让您(安全地)看到变量/字段在您不看时是否发生了变化,并且只应用了更改它没有改变。

答案 1 :(得分:0)

它肯定会过期,因此在使用之前应该检查null。正如你所说的,保存一份保存的副本是可行的。