多次调用(一次)到一次只能运行一个的方法

Bob*_*orn 3 c# oop

我有一个业务逻辑方法,必须先完成才能再次调用.多个客户端可以立即调用它:

public void DoSomething() {}
Run Code Online (Sandbox Code Playgroud)

我正在考虑通过将方法设为私有来解决它,并创建一个新的公共方法来将请求放在队列中:

public void QueueSomeWork()
{
    // put on a Queue object
    // How will DoSomething get invoked now?
}

private void DoSomething() {}
Run Code Online (Sandbox Code Playgroud)

我试图以优雅的方式解决这个问题.我的问题是如何DoSomething()知道运行.我想过创建一个计时器来检查队列,但是它会全天候运行,因为每年可能发生两次.

另一个想法是,DoSomething()当它完成了其他人会订阅的东西,从队列中选择一些工作并打电话时触发事件DoSomething().有没有更好的办法?

Dan*_*inu 10

你为什么不用锁护器?

例如:

   private static Object lockGuard = new Object();
   public void DoSomething()
   {
     lock (lockGuard) 
      {
          //logic gere
      }
    }
Run Code Online (Sandbox Code Playgroud)

锁定资源将阻止同时从多个线程进行访问.

更多关于锁定:http://msdn.microsoft.com/en-us/library/c5kehkcz(v = vs.110).aspx