我有一个可以冻结锁定命令死锁的Web服务。
lock(typeof(MyServiceType))
我觉得这是由应用程序池重置引起的。
应用程序池重置是否有可能导致锁定永久锁定?
答案 0 :(得分:6)
我无法准确评论有关应用程序池重置的情况,但是您应该尝试锁定新对象,而不是?
private readonly object myLock = new object();
void DoSomething()
{
lock(myLock)
{
...
}
}
答案 1 :(得分:1)
不正常。
应用程序池是进程隔离的。您可以解决问题的唯一方法是应用程序池因死锁而无法关闭。 (这可能是DOS,因此可能是IIS中的一个错误。)
现在想一想,真的,这可能是你的问题。您正在锁定类型( typeof MyServiceType)。您是否可以尝试锁定其他内容(这可能无法阻止从IIS中的AppDomain中卸载包含的程序集?)。像下面这样的东西是惯用的:
public class MyServiceType : //....
{
private static readonly Object _lockObject = new Object();
// ....
lock(_lockObject)
{
....
}