В документации к LazyThreadSafetyMode говорится, что использование значения ExecutionAndPublication может привести к возникновению дедлок-блоков, если метод инициализации (или конструктор по умолчанию, если нет метода инициализации) использует блокировки внутренне. Я пытаюсь лучше понять примеры, которые могут привести к возникновению дедлока при использовании этого значения. При использовании этого значения я инициализирую ChannelFactory . Я не вижу конструктора ChannelFactory, использующего какие-либо внутренние блокировки (просмотр класса с рефлектором), поэтому я считаю, что этот сценарий не подходит к возможной тупиковой ситуации, но мне любопытно, какие ситуации могут вызвать тупик, а также может ли быть возможный тупик при инициализации ChannelFactory.
Итак, подытоживая, я задаю следующие вопросы:
Возможно ли вызвать тупик при инициализации ChannelFactory с помощью ExecutionAndPublication?
Какие существуют способы вызвать тупиковую инициализацию других объектов с помощью ExecutionAndPublication?
Предположим, у вас есть следующий код:
class x
{
static Lazy> lcf =
new Lazy>(
() => new ChannelFactory("someEndPointConfig"),
LazyThreadSafetyMode.ExecutionAndPublication
);
public static ISomeChannel Create()
{
return lcf.Value.CreateChannel();
}
}