如何在asp.net webservice中同步我的方法的某些部分?

时间:2013-11-14 05:18:55

标签: c# asp.net web-services synchronization

我想同步方法的某些部分。我尝试过使用lock(this),但是当我观察日志时,两个请求一次处理,因此无法处理,所以我想一次只处理一个请求。

请帮我解决这个问题。

我尝试过以下代码。

  lock (this)
   {

  obj.ConvertFile(inputFilename, outputFullPath, null, batchProcess,   null);

   }

但它对我不起作用。 所以我在lock()

中创建了静态变量
  lock (this)
   {
    i++;               
  obj.ConvertFile(inputFilename, outputFullPath, null, batchProcess,   null);

   }

这个也不适合我。

请帮助我如何实现同步,当收到超过2个请求时,只会处理一个请求。

1 个答案:

答案 0 :(得分:0)

如果要锁定ASP.NET Web服务(在一个进程中运行多个线程),则不应在this上进行同步(尽管我只猜测this类是什么)

您可以使用以下对象作为锁定对象。它是静态的,因此它将在您班级的所有实例中共享。

private static Object thisLock = new Object();

并使用

锁定
lock(thisLock) 
{
}

来自MSDN

  

通常,避免锁定公共类型或超出代码控制范围的实例。常见的构造锁(this),lock(typeof(MyType))和lock(“myLock”)违反了这条准则:

     
      如果可以公开访问实例,则
  • lock(this)是一个问题。

  •   如果MyType可公开访问,则
  • lock(typeof(MyType))是一个问题。

  •   
  • lock(“myLock”)是一个问题,因为进程中使用相同字符串的任何其他代码将共享相同的锁。

  •   
     

最佳做法是定义要锁定的私有对象,或私有静态对象变量以保护所有实例共有的数据。