C# 锁定关键字和应用程序重置

C# 锁定关键字和应用程序重置,c#,.net,multithreading,C#,.net,Multithreading,我有一个web服务,可以冻结lock命令上的死锁 lock(typeof(MyServiceType)) 我觉得这是由应用程序池重置引起的 应用程序池重置是否有可能导致锁变成永久锁?我无法确切说明应用程序池重置的情况,但也许您应该尝试锁定一个新对象 private readonly object myLock = new object(); void DoSomething() { lock(myLock) { ... } } 不正常 应

我有一个web服务,可以冻结lock命令上的死锁

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)
      {
           ....
      }

不要锁定
类型的实例
!一般来说,你不应该锁定别人可以锁定的东西。