LazyThreadSafetyMode 列舉
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
指定 Lazy<T> 執行個體如何同步處理多個執行緒進行的存取。
public enum class LazyThreadSafetyMode
public enum LazyThreadSafetyMode
type LazyThreadSafetyMode =
Public Enum LazyThreadSafetyMode
- 繼承
欄位
ExecutionAndPublication | 2 | 使用鎖定來確保只有單一執行緒能夠以安全執行緒方式初始化 Lazy<T> 執行個體。 實際上,初始化方法會以安全線程的方式執行, (功能變數名稱) 中稱為 |
None | 0 |
Lazy<T> 執行個體不是安全執行緒;如果從多個執行緒存取此執行個體,其行為未定義。 只有在高度重視效能且絕對不會從多個執行緒初始化 Lazy<T> 執行個體時,才能使用此模式。 如果您使用的 Lazy<T> 建構函式指定初始設定方法 ( |
PublicationOnly | 1 | 當多個執行緒同時嘗試初始化 Lazy<T> 執行個體時,所有執行緒可以執行初始設定方法 (如果沒有初始設定方法,則為無參數函式)。 第一個完成初始設定的執行緒會設定 Lazy<T> 執行個體的值。 這在 |
備註
使用此列舉來指定建 mode
構函式的參數 Lazy<T> 。 執行緒同步處理上所有建構函式的效果都可以在此列舉中描述,不論它們是否具有 mode
參數。
Lazy<T>實例是由使用者指定的初始化方法或 的 T
無參數建構函式初始化。 初始化方法是由 valueFactory
建構函式的 Lazy<T> 參數所指定。 方法會傳回 的 T
實例,這是 實例所延遲具現化的 Lazy<T> 型別。 如果建構函式沒有 valueFactory
參數,則會使用 的 T
無參數建構函式來初始化 Lazy<T> 實例。 不論是哪一種情況,初始化會在您第一次呼叫 Lazy<T>.Value 屬性時發生。
除了指定實例的 Lazy<T> 執行緒安全性之外,此列舉也會影響例外狀況快取。 當實例的例外狀況快 Lazy<T> 取時,您只會有機會初始化實例。 如果您在第一次呼叫 Lazy<T>.Value 屬性時擲回例外狀況,該例外狀況會在所有後續呼叫 Lazy<T>.Value 屬性時快取並重新擲回。 快取例外狀況的優點是,即使發生錯誤,任何兩個執行緒一律都會得到相同的結果。
當您指定 PublicationOnly 模式時,永遠不會快取例外狀況。 當您指定 None 或 ExecutionAndPublication 時,快取取決於您指定初始化方法或允許使用的無參數建構 T
函式。 指定初始設定方法,可啟用這兩種模式的例外狀況快取。 初始設定方法可以非常簡單。 例如,它可能會針對 在 C# 或 New Lazy(Of Contents)(Function() New Contents())
Visual Basic 中呼叫 的 new Lazy<Contents>(() => new Contents(), mode)
無參數建構 T
函式。 如果您使用未指定初始化方法的建構函式,則不會快取 的無參數建構 T
函式擲回的例外狀況。 下表摘要說明例外狀況快取行為。
模式 | 使用初始化方法 | 針對 使用無參數建構函式 T |
---|---|---|
None | 快取 | 不快取 |
PublicationOnly | 不快取 | 不快取 |
ExecutionAndPublication | 快取 | 不快取 |