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

标签 c# .net multithreading locking

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

举个例子:

  1. 定时器超时,所以方法是 叫。该任务可能需要几个 秒。

  2. 紧接着,用户点击了一些 按钮,它应该触发 相同的任务: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# - 如何在多线程上下文中使方法独占?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/148078/

相关文章:

c# - 使用字段名称作为字符串调用 OrderBy()

C# 如何从字符串响应中删除转义引号

c# - 如何发送邮件异步

c - Solac 单线程 C 应用程序

python - 为什么线程没有等待输入就结束了?

c# - 动态 CSV 文件下载

c# - 在 Web api Controller 中使用身份验证过滤器发送 json 响应?

c# - 类型 "Windows.UI.Xaml.FrameworkElement"在未引用的程序集中定义

.net - 从 2 个点和一个宽度获取一个矩形

java - Spring中实例DAI与Singleton Bean的交互