【发布时间】:2011-05-28 21:25:11
【问题描述】:
LazyThreadSafetyMode 的文档指出,如果初始化方法(或默认构造函数,如果没有初始化方法)在内部使用锁,则使用值 ExecutionAndPublication 可能会导致死锁。我试图更好地理解使用此值时可能导致死锁的示例。在我使用这个值时,我正在初始化一个ChannelFactory。我看不到 ChannelFactory 的构造函数使用任何内部锁(使用 Reflector 查看类),所以我相信这种情况不适合可能的死锁情况,但我很好奇哪些情况会导致死锁以及是否有可能初始化 ChannelFactory 的死锁。
所以,总而言之,我的问题是:
使用 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();
}
}
【问题讨论】:
标签: c# .net deadlock lazythreadsafetymode