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