我有一个带有一些静态属性的静态类。我在静态构造函数中初始化了所有这些,但后来意识到这很浪费,我应该在需要时延迟加载每个属性。所以我转而使用该System.Lazy<T>
类型来完成所有肮脏的工作,并告诉它不要使用它的任何线程安全功能,因为在我的例子中执行总是单线程的。
我结束了以下课程:
public static class Queues
{
private static readonly Lazy<Queue> g_Parser = new Lazy<Queue>(() => new Queue(Config.ParserQueueName), false);
private static readonly Lazy<Queue> g_Distributor = new Lazy<Queue>(() => new Queue(Config.DistributorQueueName), false);
private static readonly Lazy<Queue> g_ConsumerAdapter = new Lazy<Queue>(() => new Queue(Config.ConsumerAdaptorQueueName), false);
public static Queue Parser { get { return g_Parser.Value; } }
public static Queue Distributor { get { return g_Distributor.Value; } }
public static Queue ConsumerAdapter { get { return g_ConsumerAdapter.Value; } }
}
调试时,我注意到一条我从未见过的消息:
函数评估需要所有线程运行
使用前Lazy<T>
,直接显示数值。现在,我需要单击带有线程图标的圆形按钮来评估惰性值。这只发生在我正在检索的属性.Value
上Lazy<T>
。展开实际Lazy<T>
对象的调试器可视化节点时,该Value
属性仅显示null
,没有任何消息。
该消息是什么意思,为什么在我的案例中显示?