繁体   English   中英

如何避免对同一方法的多次调用C#

[英]How to avoid multiple calls to the same method c#

我有一个ac#方法,客户端带有asp,在相机检测到QR码时触发

protected void qrDetectado(object sender, EventArgs e)
{
    .....
}

但是,在某些情况下,它多次检测到相同的QR码,并多次调用qrDetectado方法,从而给数据库等带来很多麻烦。

有没有一种方法可以防止在同一时间多次调用同一方法

编辑:是的,只是为了澄清一点,我通过js调用了该方法,如果它已经读取了代码,我就不需要它再次运行。

通常,这种行为是在第一次读取某些内容时发生的,它具有某种延迟,其结果是我在数据库中拥有同一个寄存器的3或4倍,还有其他一些问题,因此,我只需要运行它一次,一旦完成,继续阅读

解决此问题的一种方法是使用lock 当它试图获取对象_syncRoot的锁时,这将阻塞调用线程,只有单个线程可以一次锁定该对象。 一旦lock语句中的代码完成,线程将释放锁,然后另一个线程可以输入该代码块。 我已经声明了该对象为静态对象,因此对于该类的所有实例它都是相同的对象。 请注意,这不会在服务器/进程之间锁定。

   private static readonly object _syncRoot = new object();

   protected void qrDetectado(object sender, EventArgs e)
   {
        lock(_syncRoot)
        {
            // Do stuff
        }
   }

您可以在此处阅读有关锁定的更多信息

如果实际上您实际上只希望在对象的生存期内对其调用一次,并且仅调用一次,则可以将锁与门标志结合使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM