gpt4 book ai didi

c# - 如果先前已获取锁,如何使用 Monitor 类和对象锁来防止方法执行

转载 作者:行者123 更新时间:2023-11-30 16:39:06 25 4
gpt4 key购买 nike

我有一个间隔为 60 秒的计时器,在它的 timer_elapsed 事件处理程序中,我正在执行一个方法。如果当前调用仍在运行,我只想跳过对方法的下一次调用,前提是时间已经过去并且下一次调用方法已准备就绪。如何使用 Monitor 和 object lock 来做到这一点?这是我的代码片段

private static object lock = new object();
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Monitor.Enter(lock);
try
{
SomeMethod();
}
finally
{
Monitor.Exit(lock);
}
}

如果之前的调用仍在进行中,我只想跳过对方法的整个调用。

最佳答案

您可以使用 Monitor.TryEnter .此方法尝试获取锁并返回此操作的结果。它也有一些有用的重载,例如它可以尝试获取具有指定超时的锁。

private static object lock = new object();
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
bool haveLock = false;

try
{
Monitor.TryEnter(lock, ref haveLock);
if (haveLock)
{
SomeMethod();
}
}
finally
{
if (haveLock)
{
Monitor.Exit(lock);
}
}
}

关于c# - 如果先前已获取锁,如何使用 Monitor 类和对象锁来防止方法执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53667844/

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