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

Nik*_*las 5 .net caching execution

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

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

这是一个例子

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

    // Long and heavy code execution done here

    if (Cache["name"] == null) Response.Write("Lost the data");
}
Run Code Online (Sandbox Code Playgroud)

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

如果是的话,首先保存变量始终检查null并且永远不会是否总是好的做法?

提前致谢!

/尼克拉斯

Mar*_*ell 4

绝对可以。

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

var snapshot = Cache["name"];
if(snapshot != null) {...}
Run Code Online (Sandbox Code Playgroud)

并贯穿snapshot始终。当谈到线程时,上面的方法通常是一个明智的方法;唯一需要注意的是,您可能需要查看Interlocked一系列方法,这些方法可以让您(安全地)查看变量/字段在您没有查看时是否发生了更改,并且仅在未更改的情况下应用更改。