我有一项服务每 10 秒访问一次数据库并获取数据(如果有的话)。问题是处理这些数据最多可能需要 30 秒。如果我使用间隔为 10 秒的计时器,该服务将两次获取相同的数据。
我想要达到的效果(只是为了可视化):
while(true)
{
if(Getnrofrows() > 0)
do stuff
else
sleep for 10 sec
}
人们说 Thread.Sleep 在生产服务中是个坏主意,我该如何使用计时器来做到这一点?
/迈克
最佳答案
您是否尝试将 Timer 属性自动重置为 false,并在刷新数据过程结束时再次启用计时器
using System;
public class PortChat
{
public static System.Timers.Timer _timer;
public static void Main()
{
_timer = new System.Timers.Timer();
_timer.AutoReset = false;
_timer.Interval = 100;
_timer.Elapsed += new System.Timers.ElapsedEventHandler(_timer_Elapsed);
_timer.Enabled = true;
Console.ReadKey();
}
static void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//Do database refresh
_timer.Enabled = true;
}
}
关于C# 计时器与服务中的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3474694/