LazyThreadSafetyMode belgesi, ExecutionAndPublication değerini kullanarak başlatma yöntemini (veya başlatma yöntemi yoksa varsayılan yapıcı) kilitleri dahili olarak kullanırsa deadlock'lere neden olabileceğini belirtir. Bu değeri kullanırken bir kilitlenmeye neden olabilecek örneklerin daha iyi anlaşılmasına çalışıyorum. Bu değeri kullanmamda, ChannelFactory başlatıyorum. Herhangi bir dahili kilit kullanarak (Reflektörlü sınıfı gözden geçirerek) ChannelFactory'un yapıcısını göremiyorum, bu yüzden bu senaryonun olası bir kilitlenme durumuna uymadığını düşünüyorum, ancak olası bir durumun ortaya çıkması durumunda hangi durumların çıkmaza neden olabileceğini merak ediyorum. ChannelFactory'yi başlatan kilitlenme.Lazy <T> ExecutionAndPublication - Deadlock'a Neden Olabilecek Örnekler
Özetlemek gerekirse, sorularım şunlardır:
o ExecutionAndPublication kullanarak ChannelFactory başlatılırken bir kilitlenmeye neden mümkün mü?
ExecutionAndPublication'ı kullanarak diğer nesneleri başlatacak bir kilitlemeye neden olmanın bazı olası yolları nelerdir?
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();
}
}
Harika cevap @svick - zıt düzende elde edilen iç içe geçmiş kilitlerin klasik örneği, bu düşündüğüm çizgilerin çizgisi boyunca - senaryoya açıklık getirmek için harika bir örnek, teşekkürler! – dugas