我想同步方法的某些部分。我已经尝试过使用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] 删除。
我来说两句