我有一个方法应该以独家方式执行。基本上,这是一个多线程应用程序,其中该方法由定时器定期调用,但也可以由用户操作手动触发。如何在多线程上下文中独占方法?
让我们举个例子:
的定时器结束,因此该方法是 调用。该任务可能需要几秒钟的时间。
之后,用户点击一些 按钮,这应该会触发 相同的任务: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();
编辑:将有哪些持有该对象的只有一个实例方法,所以我将锁对象更新为非静态的。
有没有更好的方法来做到这一点?或者,也许这是一个错误的任何理由?
注意的是互斥使用内核资源重量级的对象,如果你需要输入锁跨进程的工作应仅使用。显示器更轻更快。在'Accelerated C#2008'中,Trey Nash写道:“一个简单的测试表明,使用Mutex的时间比Monitor类长34倍。” – 2008-09-29 20:24:17
优化速度听起来非常不成熟。 – bzlm 2008-10-01 11:50:09