2011-02-28 48 views
5

這可能只是一個理論上的問題,但我一直沒能找到滿意的答案。代碼執行期間緩存(或其他變量)是否可以更改?

我用我的網站這讓我想到了它的一個緩存的數據,並在如果它的變化。在執行某些代碼期間高速緩存是否可以更改?

下面是一個例子

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

    // Long and heavy code execution done here 

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

可以在與上面的代碼更改並行高速緩存運行或它等待,直到它完成的過程?
是否有一個理論的機會,這將打印「丟失的數據」?

如果是,它總是好的做法,以保存可變第一經常檢查永不不爲空

在此先感謝!

/尼克拉斯

回答

4

絕對可以。從緩存中

始終快照值,和工作與快照:

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

,並使用snapshot貫穿始終。當涉及到螺紋,上面是通常一個理智的方式;唯一需要注意的被你可能想看看Interlocked了一系列的讓你看到(安全),而你不找一個變量/字段是否改變方法,只適用於改變它,它並沒有改變。

+0

馬克,因爲你在這裏。你介意回答我對RBAC的最新評論,你在這個星期五幫助我=)? – Niklas 2011-02-28 12:53:53

0

它肯定會過期,因此在使用它之前應該先檢查null。正如你所說,保存一份保存的副本是很好的。

相關問題