我有一个 c# 方法,在客户端有 asp,在摄像头检测到二维码时触发
protected void qrDetectado(object sender, EventArgs e)
{
.....
}
但在某些情况下,它会多次检测到相同的二维码,并多次调用 qrDetectado 方法,从而导致数据库出现很多问题等。
有没有办法防止同时多次调用同一个方法
编辑:是的,只是为了澄清一点,我通过 js 调用该方法,如果它已经读取了代码,我不需要它再次运行。
通常这种行为发生在它第一次读取某些东西时,它有某种延迟,结果是我在数据库中有 3 或 4 次相同的寄存器和一些其他问题,所以,我只需要运行一次,一旦完成,继续阅读
最佳答案
解决此问题的一种方法是使用锁
。这将在尝试获取对象 _syncRoot
上的锁时阻止调用线程,一次只能有一个线程锁定该对象。一旦 lock 语句中的代码完成,线程将释放锁,然后另一个线程可以进入该代码块。我已经将对象声明为静态的,这样它对于类的所有实例都是同一个对象。请注意,这不会跨服务器/进程锁定。
private static readonly object _syncRoot = new object();
protected void qrDetectado(object sender, EventArgs e)
{
lock(_syncRoot)
{
// Do stuff
}
}
您可以阅读有关锁定的更多信息 here.
如果实际上您只想在对象的生命周期内调用一次,并且只调用一次,那么您可以将锁与门标志结合起来。
关于c# - 如何避免多次调用同一个方法 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41927729/