1
我很困惑自己正在閱讀關於Lazy <T>(bool)構造函數的微軟文檔。懶惰<T>(布爾型)構造函數文檔
參數被描述爲:
isThreadSafe:真由多個線程,使這個實例可用同時;爲了使該實例一次只能由一個線程使用,爲false。
如果我將在訪問通常寫的代碼是:
If _rulesCache Is Nothing Then
SyncLock (_lockRulesCache)
If _rulesCache Is Nothing Then
_rulesCache = New RulesCache()
End If
End SyncLock
End If
Return _rulesCache
做我想做的懶惰型的構造函數使用真或假?
Private _rulesCache As New Lazy(Of RulesCache)(**?**)
所以我的訪問者變爲:
Return _rulesCache.Value
1)一旦對象被創建,它可以在內部處理多個線程訪問。
2)我只需要確保如果有多個線程同時接近訪問器並且對象不存在,那麼它只會被創建一次。
根據文檔,語句1意味着該參數應該是false。陳述2意味着該參數應該是真實的。
我覺得我過度思考這一點,這只是讓我更加困惑。或者上面的兩個聲明實際上彼此不一致,我應該堅持手動鎖定來管理對象實例化?
因此,我應該解釋isThreadSafe值,看看Lazy實例是否應該期望並處理嘗試同時實例化它的多個線程(true),或者如果它正在單線程環境中使用,它可以使用僅針對優化的代碼一個線程實例化它(false)。是? – ulty4life 2010-12-08 04:06:03