値ExecutionAndPublicationを使用すると、デッドロックを引き起こす可能性があることLazyThreadSafetyMode状態のためのマニュアルを参照して原因でした例。私は、この値を使用するときにデッドロックを引き起こす可能性のある例をよりよく理解しようとしています。この値を使用するにあたっては、ChannelFactoryを初期化しています。私はChannelFactoryのコンストラクタが内部ロックを使用しているのを見ることができません(Reflectorでクラスをレビューする)ので、このシナリオはデッドロックの可能性に合わないと思いますが、デッドロックの原因となる可能性があるChannelFactoryを初期化するデッドロック。レイジー<T> ExecutionAndPublication - (なし初期化メソッドが存在しない場合はデフォルトコンストラクタ、)初期化メソッドが内部でロックを使用する場合、デッドロック
ので、要約し、私の質問は以下のとおりです。
それはExecutionAndPublicationを使用してのChannelFactoryを初期化デッドロックが発生することは可能ですか?
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();
}
}
偉大な答え@svick - 逆の順序で取得されたネストされたロックの古典的な例は、これは私が考えていた行に沿っています - シナリオを明らかにするための素晴らしい例、ありがとう! – dugas