Lazy<T>.IsValueCreated 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取一个值,该值表示是否为该 Lazy<T> 实例创建了值。
public:
property bool IsValueCreated { bool get(); };
public bool IsValueCreated { get; }
member this.IsValueCreated : bool
Public ReadOnly Property IsValueCreated As Boolean
属性值
如果为此 Lazy<T> 实例创建了值,则为 true
;否则为 false
。
注解
当实例 Lazy<T> 发生延迟初始化时,可能会导致创建值或引发异常。 如果引发异常,则实例的 Lazy<T> 后续行为取决于异常缓存是否有效。
Lazy<T>如果实例是使用未指定初始化函数的构造函数创建的,则异常缓存不起作用。 后续尝试初始化 Lazy<T> 可能会成功,并且成功初始化后, IsValueCreated 属性将返回 true
。
Lazy<T>如果实例是使用初始化函数 (由valueFactory
构造函数) 参数Lazy<T>指定的,则异常缓存由线程安全模式控制。
如果模式为 LazyThreadSafetyMode.ExecutionAndPublication 或 LazyThreadSafetyMode.None,则没有第二次机会初始化 Lazy<T> 实例。 如果发生异常并且未在初始化函数中处理,则会缓存该异常并在属性的 Lazy<T>.Value 后续访问中重新引发。 如果引发异常,则不会创建任何值,因此在这种情况下,返回 IsValueCreated
false
。如果模式为 LazyThreadSafetyMode.PublicationOnly,则成功运行初始化函数的第一个线程 (或无参数构造函数) 为 Lazy<T> 实例创建值。 如果初始化函数在一个线程上引发异常,其他线程仍可以尝试初始化实例 Lazy<T> 。 在创建值之前, IsValueCreated 属性将
false
返回 。