WCF服务和锁定关键字

本文关键字:关键字 锁定 服务 WCF | 更新日期: 2023-09-27 18:21:32

假设我在控制台应用程序中有一个托管的wcf服务,如下所示:

public class MyService : IContract
{
  public static readonly object _locker_ = new object();
  public static void DoSomething()
  {
    lock (_locker_)
    {
      //block 1
      DoAnotherWork();
    }
  }
  void IContract.Foo1()
  {
    lock (_locker_)
    {
      //block 2
      DoSomeWork();
    }
  }
  void IContract.Foo2()
  {
    DoSomething();
  }
}

这是否确保只有一个客户端在块1中?还是块2?

WCF服务和锁定关键字

您只有一个锁,因此在任何时间点只有一个方法可以获得锁。如果DoSomeWork和DoAnotherWork要并行运行,则需要单独的锁。

还请注意,在考虑线程时,您需要考虑WCF服务的InstanceContextMode,默认值为PerCall。

每个应用程序域都有一个静态锁对象;因此"块1"answers"块2"只允许单个调用者。最终,是的。只要你只有一个appdomain;p

请注意,锁是可重入的,因此具有锁的线程可以再次调用方法而不会自身死锁(但不能通过WCF;只能通过常规C#方法调用)。