我想同步方法的某些部分。我尝试过使用lock(this),但是当我观察日志时,两个请求一次处理,因此无法处理,所以我想一次只处理一个请求。
请帮我解决这个问题。
我尝试过以下代码。
lock (this)
{
obj.ConvertFile(inputFilename, outputFullPath, null, batchProcess, null);
}
但它对我不起作用。 所以我在lock()
中创建了静态变量 lock (this)
{
i++;
obj.ConvertFile(inputFilename, outputFullPath, null, batchProcess, null);
}
这个也不适合我。
请帮助我如何实现同步,当收到超过2个请求时,只会处理一个请求。
答案 0 :(得分:0)
如果要锁定ASP.NET Web服务(在一个进程中运行多个线程),则不应在this
上进行同步(尽管我只猜测this
类是什么)
您可以使用以下对象作为锁定对象。它是静态的,因此它将在您班级的所有实例中共享。
private static Object thisLock = new Object();
并使用
锁定lock(thisLock)
{
}
来自MSDN:
通常,避免锁定公共类型或超出代码控制范围的实例。常见的构造锁(this),lock(typeof(MyType))和lock(“myLock”)违反了这条准则:
如果可以公开访问实例,则
- 如果MyType可公开访问,则
lock(this)是一个问题。
lock(typeof(MyType))是一个问题。
lock(“myLock”)是一个问题,因为进程中使用相同字符串的任何其他代码将共享相同的锁。
最佳做法是定义要锁定的私有对象,或私有静态对象变量以保护所有实例共有的数据。