gpt4 book ai didi

c# - 不可重入定时器

转载 作者:太空狗 更新时间:2023-10-29 19:50:49 27 4
gpt4 key购买 nike

我有一个函数,我想每 x 秒调用一次,但我希望它是线程安全的。

我可以在创建计时器时设置此行为吗? (我不介意使用哪个 .NET 计时器,我只希望它是线程安全的)。

我知道我可以在我的回调函数中实现锁,但我认为如果它在计时器级别会更优雅。

我的回调函数和环境与 UI 无关。

[编辑 1]我只是不想在我的回调函数中有一个以上的线程。

[编辑 2]我想将锁定保留在计时器级别内,因为计时器负责何时调用我的回调,这里有一种特殊情况,我不想调用我的回调函数。所以我认为何时调用是计时器的责任

最佳答案

我猜,由于您的问题并不完全清楚,您希望确保您的计时器在处理回调时无法重新进入回调,并且您希望在不锁定的情况下执行此操作。您可以使用 System.Timers.Timer 并确保将 AutoReset 属性设置为 false 来实现此目的。这将确保您必须在每个间隔手动触发计时器,从而防止任何重入:

public class NoLockTimer : IDisposable
{
private readonly Timer _timer;

public NoLockTimer()
{
_timer = new Timer { AutoReset = false, Interval = 1000 };

_timer.Elapsed += delegate
{
//Do some stuff

_timer.Start(); // <- Manual restart.
};

_timer.Start();
}

public void Dispose()
{
if (_timer != null)
{
_timer.Dispose();
}
}
}

关于c# - 不可重入定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7055820/

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