gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:35:24 25 4
gpt4 key购买 nike

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

举个例子:

  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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com