use*_*348 0 .net c# wcf multithreading
我有一个配置了以下属性的服务
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.Single)]
public class UserService : IUserServiceContract
{}
Run Code Online (Sandbox Code Playgroud)
我应该在此方案中使用服务中实现的方法的锁定机制吗?
如果是,这是正确的实施吗?
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.Single)]
public class UserService : IUserServiceContract
{
private readonly object LockObject = new object();
public Object1 GetObject1()
{
lock (LockObject)
{
using (var ob = new Object1)
{
return ob.Get();
}
}
}
public Object2 GetObject2()
{
lock (LockObject)
{
using (var ob = new Object2)
{
return ob.Get();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您应该同步对所有共享资源(即所有服务字段或属性)的访问.
但在这种情况下:
public Object2 GetObject2()
{
lock (LockObject)
{
using (var ob = new Object2)
{
return ob.Get();
}
}
}
Run Code Online (Sandbox Code Playgroud)
不,没有必要锁定,因为没有共享资源.对于每个调用(或消息),都有单独的调用堆栈,因此在这种情况下,单独的调用将创建单独的Object2实例.