gpt4 book ai didi

c# - 同步定时器以防止重叠

转载 作者:IT王子 更新时间:2023-10-29 04:45:26 25 4
gpt4 key购买 nike

我正在编写一个 Windows 服务,它每隔一定时间运行一个可变长度的事件(数据库扫描和更新)。我需要此任务频繁运行,但要处理的代码并发运行多次并不安全。

我怎样才能最简单地设置一个计时器,使其每 30 秒运行一次任务,同时从不重叠执行? (我假设 System.Threading.Timer 是这项工作的正确计时器,但可能是错误的)。

最佳答案

您可以使用计时器来完成,但您需要对数据库扫描和更新进行某种形式的锁定。一个简单的 lock 同步可能足以防止多次运行的发生。

也就是说,在您的操作完成后启动一个计时器可能会更好,并且只使用它一次,然后停止它。下次操作后重新启动它。这将使您在事件之间有 30 秒(或 N 秒),没有重叠的机会,也没有锁定。

示例:

System.Threading.Timer timer = null;

timer = new System.Threading.Timer((g) =>
{
Console.WriteLine(1); //do whatever

timer.Change(5000, Timeout.Infinite);
}, null, 0, Timeout.Infinite);

立即工作......完成......等待 5 秒......立即工作......完成......等待 5 秒......

关于c# - 同步定时器以防止重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/684200/

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