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并且永远不会为空是否总是好的做法?
提前致谢!
/尼克拉斯
绝对可以。
始终从缓存中快照值,并使用快照:
var snapshot = Cache["name"];
if(snapshot != null) {...}
Run Code Online (Sandbox Code Playgroud)
并贯穿snapshot始终。当谈到线程时,上面的方法通常是一个明智的方法;唯一需要注意的是,您可能需要查看Interlocked一系列方法,这些方法可以让您(安全地)查看变量/字段在您没有查看时是否发生了更改,并且仅在未更改的情况下应用更改。