C# 锁定关键字和应用程序重置
我有一个web服务,可以冻结lock命令上的死锁C# 锁定关键字和应用程序重置,c#,.net,multithreading,C#,.net,Multithreading,我有一个web服务,可以冻结lock命令上的死锁 lock(typeof(MyServiceType)) 我觉得这是由应用程序池重置引起的 应用程序池重置是否有可能导致锁变成永久锁?我无法确切说明应用程序池重置的情况,但也许您应该尝试锁定一个新对象 private readonly object myLock = new object(); void DoSomething() { lock(myLock) { ... } } 不正常 应
lock(typeof(MyServiceType))
我觉得这是由应用程序池重置引起的
应用程序池重置是否有可能导致锁变成永久锁?我无法确切说明应用程序池重置的情况,但也许您应该尝试锁定一个新对象
private readonly object myLock = new object();
void DoSomething()
{
lock(myLock)
{
...
}
}
不正常
应用程序池是进程隔离的。出现问题的唯一方法是应用程序池由于死锁而无法关闭。(这将是DOS,因此可能是IIS中的错误。)
现在想想,真的,这可能是你的问题。您正在锁定一个类型(TypeOfMyServiceType)。是否可以尝试锁定其他内容(这可能不会阻止从IIS中的AppDomain卸载包含程序集?)。类似以下的内容是惯用的:
public class MyServiceType : //....
{
private static readonly Object _lockObject = new Object();
// ....
lock(_lockObject)
{
....
}
不要锁定
类型的实例
!一般来说,你不应该锁定别人可以锁定的东西。