Lazy用于延迟初始化,确保对象仅在首次访问Value时创建,适用于高成本、可能不用或需线程安全初始化的场景;支持三种线程安全模式,默认ExecutionAndPublication。

Lazy
什么时候该用 Lazy
适用于以下场景:
- 对象构造成本高(如数据库连接、大型配置加载、文件读取)
- 对象可能在整个生命周期中都不会被用到
- 需要线程安全的单次初始化(默认支持)
- 想把“创建时机”从声明/构造阶段推迟到真正使用时
基本用法:最简初始化
直接传入一个工厂函数(Func
private readonly Lazy<List<string>> _heavyList = new(() => LoadFromDatabase());
登录后复制
调用时只需:var data = _heavyList.Value; // 第一次调用才执行 LoadFromDatabase()
控制线程安全与初始化时机
Lazy
-
LazyThreadSafetyMode.ExecutionAndPublication(默认):多线程下保证只初始化一次,且线程安全 -
LazyThreadSafetyMode.PublicationOnly:允许多次初始化,但只发布第一个成功结果(轻量级,适合无副作用的工厂) -
LazyThreadSafetyMode.None:完全不加锁,仅限单线程场景(性能最高)
例如禁用线程安全(确认是单线程):
标签: c#
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~