我想知道如何实现以下限制:在早期调用完成之前,不应再次调用Windows服务中的一种方法.有问题的方法通过几个数据库表进行,非常重要的是在完成之前不会再次调用此过程.我有一个设置,定义我的服务将激活的频率,在正常情况下,它永远不会在早期调用完成之前激活(因为整个过程不应超过几分钟,间隔设置为10分钟)但不是果然.我猜.
怎么实现这个?
您可以使用命名的Mutex或命名的Semaphor e来确保只有一个Mutex/Semaphore的持有者一次执行.正如评论者指出的那样,请记住,必须小心不要放弃互斥锁或不正确地获取/释放信号量.
一种方法是使用锁定:
private readonly object myLock = new object(); private void MyMethod() { lock(myLock) { //code goes here } }
这可以确保此方法永远不会再运行一次.