Lazy ExecutionAndPublication - Examples That Could Could Cause Deadlock

В документации к LazyThreadSafetyMode говорится, что использование значения ExecutionAndPublication может привести к возникновению дедлок-блоков, если метод инициализации (или конструктор по умолчанию, если нет метода инициализации) использует блокировки внутренне. Я пытаюсь лучше понять примеры, которые могут привести к возникновению дедлока при использовании этого значения. При использовании этого значения я инициализирую ChannelFactory . Я не вижу конструктора ChannelFactory, использующего какие-либо внутренние блокировки (просмотр класса с рефлектором), поэтому я считаю, что этот сценарий не подходит к возможной тупиковой ситуации, но мне любопытно, какие ситуации могут вызвать тупик, а также может ли быть возможный тупик при инициализации ChannelFactory.

Итак, подытоживая, я задаю следующие вопросы:

  1. Возможно ли вызвать тупик при инициализации ChannelFactory с помощью ExecutionAndPublication?

  2. Какие существуют способы вызвать тупиковую инициализацию других объектов с помощью ExecutionAndPublication?

Предположим, у вас есть следующий код:

class x
{
   static Lazy> lcf = 
        new Lazy>(
        () => new ChannelFactory("someEndPointConfig"), 
        LazyThreadSafetyMode.ExecutionAndPublication
        );

    public static ISomeChannel Create()
    {
        return lcf.Value.CreateChannel();
    }
}

13
задан dugas 28 May 2011 в 21:25
поделиться