У меня есть статический класс с некоторыми статическими свойствами. Я инициализировал их все в статическом конструкторе, но потом понял, что это расточительно, и я должен lazy-load каждое свойство, когда это необходимо. Поэтому я переключился на использование типа 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>
. При расширении визуализатора отладки node фактического объекта Lazy<T>
свойство Value
просто отображает null
без какого-либо сообщения.
Что означает это сообщение и почему оно отображается в моем случае?