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?
您只有一个锁,因此在任何时间点只有一个方法可以获得锁。如果DoSomeWork和DoAnotherWork要并行运行,则需要单独的锁。
还请注意,在考虑线程时,您需要考虑WCF服务的InstanceContextMode,默认值为PerCall。
每个应用程序域都有一个静态锁对象;因此"块1"answers"块2"只允许单个调用者。最终,是的。只要你只有一个appdomain;p
请注意,锁是可重入的,因此具有锁的线程可以再次调用方法而不会自身死锁(但不能通过WCF;只能通过常规C#方法调用)。