1

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

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

我试过下面的代码。

  lock (this)
   {

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

   }

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

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

   }

这个也不适合我。

请帮助我如何实现在收到超过 2 个请求时一次只处理一个请求的同步。

4

1 回答 1

0

如果你想锁定 ASP.NET Web 服务(它在一个进程中运行多个线程),你不应该同步this(虽然我只是猜测this类是什么)。

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

private static Object thisLock = new Object();

并使用它锁定

lock(thisLock) 
{
}

来自MSDN

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

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

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

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

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

于 2013-11-14T05:25:39.430 回答