如何在ASP.NET Web服务中同步我的方法的某些部分?

Lax_me

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

请帮助我如何实现这一点。

我尝试了以下代码。

  lock (this)
   {

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

   }

但这对我没有用。所以我在lock()中创建了静态变量

  lock (this)
   {
    i++;               
  obj.ConvertFile(inputFilename, outputFullPath, null, batchProcess,   null);

   }

这也对我不起作用。

请帮助我如何实现同步,即在接收到两个以上请求时,仅一次处理一个请求。

西蒙

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

您可以将以下对象用作锁定对象。它是静态的,因此它将在您的类的所有实例之间共享。

private static Object thisLock = new Object();

并锁定使用

lock(thisLock) 
{
}

MSDN

通常,避免锁定公共类型或代码无法控制的实例。常见的构造锁(this),锁(typeof(MyType))和锁(“ myLock”)违反了该准则:

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

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章