gpt4 book ai didi

c# - System.Lazy 和 System.Threading.LazyThreadSafetyMode 枚举

转载 作者:太空狗 更新时间:2023-10-29 22:52:43 27 4
gpt4 key购买 nike

使用 C#/.NET 4.0,一个 Lazy<T>对象可以声明如下。

using System;
using System.Threading;
...
var factory = () => { return new object(); };
var lazy = new Lazy<object>(factory, LazyThreadSafetyMode.ExecutionAndPublication);

LazyThreadSafetyMode 中的其他选项枚举是PublicationOnlyNone .

为什么没有ExecutionOnly选项?

这种情况下的行为是工厂方法最多被单个线程调用一次,即使多个线程尝试获取 lazy.Value 也是如此。 .一旦工厂方法完成并缓存单个结果,许多线程将能够同时访问 lazy.Value(即,在初始工厂方法之后没有线程安全)。

最佳答案

您描述的行为实际上是 LazyThreadSafetyMode.ExecutionAndPublication。这允许多个线程访问 Value,但只有一个线程可以运行初始化方法。

此枚举仅用于确定创建的发生方式 - 您始终可以从多个线程访问 Value

关于c# - System.Lazy<T> 和 System.Threading.LazyThreadSafetyMode 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13870941/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com