c# – 如何在多线程上下文中使方法独占?

我有一个应该以独家方式执行的方法.基本上,它是一个多线程应用程序,其中方法由计时器定期调用,但也可以由用户操作手动触发.

我们来举个例子:

>计时器过去了,所以方法是
调用.任务可能需要一些
秒.
>之后,用户点击一些
按钮,应该触发
同样的任务:BAM.它什么都不做
因为该方法已在运行.

我使用了以下解决方案:

public void DoRecurentJob()
{
    if(!Monitor.TryEnter(this.lockObject))
    {
        return;
    }

    try
    {
        // Do work
    }
    finally 
    {
        Monitor.Exit(this.lockObject);
    }
}

其中lockObject的声明方式如下:

private readonly object lockObject = new object();

编辑:只有一个对象的实例保存此方法,因此我将锁定对象更新为非静态.

有没有更好的方法呢?或者也许这个因为任何原因都是错的?

解决方法:

如果您只是对并行运行方法感兴趣,这看起来很合理.没有什么可以阻止它在彼此之后立即运行,比如在计时器执行Monitor.Exit()之后你按下按钮半微秒.

将锁定对象设置为只读静态也是有意义的.

上一篇:C#阻止从其他线程访问所有对象方法


下一篇:c# – Monitor.TryEnter / Monitor.Exit和SynchronizationLockException