Chr*_*sic 4 .net generics thread-safety lazy-evaluation base-class-library
在初始化期间使用Lazy<T>类和标记有什么含义isThreadSafe: false?
在懒惰需要访问实例成员而不是在类构造函数中初始化lazy的静态成员的情况下,这会isThreadSafe: false 在所有用法中自动要求吗?
在懒惰需要访问实例成员而不是在类构造函数中初始化lazy的静态成员的情况下,这会在所有用法中自动要求isThreadSafe:false吗?
否 - isThreadSafe参数仅影响其中的值的Lazy<T>创建方式.
基本上,当您将其设置为false时,创建值的方法将只创建值,将其设置为内部存储,然后返回值.
如果将其设置为true,则创建将包含在a中lock,从而防止多个线程创建该对象.这映射到LazyThreadSafetyMode.ExecutionAndPublication.
您还可以PublicationOnly显式指定,这将允许创建多个值,但是然后在内部使用Interlocked.CompareExchange而不是锁,以确保第一个完成的创建例程的值是用于该对象的值.
请注意,这些选项都不会对使用哪些成员计算值产生任何影响 - 它们只影响值本身的创建方式.除了创建之外的所有内容的访问始终是线程安全的.如果要在类构造函数中初始化Lazy<T> 实例成员,则可以有效地保证不需要同步,因此可以设置isThreadSafe为false - 但这也意味着Lazy<T>在这种情况下绝对没有理由使用,因为你正在使用显式实例化...