多线程操作合同中的同步

时间:2014-06-30 13:56:19

标签: c# multithreading wcf thread-safety task

遵循操作契约构造并返回名为ObjectGraph的反序列化数据结构。这是通过

完成的
  • 使用登录用户检索对象ID的步骤( a )。这可确保没有两个用户获得相同的对象ID。

  • 步骤( b )使用对象ID(来自Step a )来加载序列化对象图。

在此阶段,使用lock在同步块中执行 a b 两个步骤。这按预期工作。但是,由于性能问题,我现在想分开Step a b ,因为Step b 比步骤a花费的时间更长,因此客户获得排队很容易。

是否可以在不丢失同步访问的情况下进行拆分?如果是这样,有人知道怎么做?

[ErrorBehavior(typeof(ErrorHandler))]
[ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple, InstanceContextMode=InstanceContextMode.PerCall)]
public class ServiceImp : IService
{
    private static object _lockOb = new object();
    //ObjectGraph is a custom data structure.
    public ObjectGraph GetObject(Guid IdUser)
    {
        lock(_lockOb) //This is to ensure that no two or more client execute below logic at any point in time.
        {
            //GetId method returns object id from database.
            var id=GetId(); 

            //LoadObjectGraphFromDatabase accept object id, read serialized data from database and finally returns a de-serialized ObjectGraph object.
            var graph=LoadObjectGraphFromDatabase(id) 
            return graph;
        }
    }
}

0 个答案:

没有答案