System.Threading.Timer是否依赖系统时间正确?

Dan*_*ear 6 .net c#

我有一个服务,它基于System.Threading.Timer每30分钟运行一次作业.定时器像往常一样设置间隔,并异步关闭作业.

昨晚它驻留在服务器上的时间决定将自己重置为与实际时间和日期完全不同的东西.随后,我的工作没有每30分钟运行一次 - 事实上他们完全停止了.

然而,在今天早上重置时间后,下一个30分钟的任务自行运行(30分钟后),然后所有其他任务在同一时间自行运行,好像他们整夜排队一样.

任何人都可以对此有所了解吗?

编辑:作为更新 - 使用其他计时器(System.Timers.Timer)和完全相同的事情发生.时间变为完全不同的东西,服务然后停止完成其任务,直到早上重新设置时间,然后30分钟后它运行所有应该从时间改变后每30分钟运行一次的任务!

Paw*_*sen 1

我无法复制导致这种情况的场景。

使用此代码

class Program
{
    private static Timer timer;
    private static readonly Stopwatch stopwatch = new Stopwatch();

    static void Main(string[] args)
    {
        timer = new Timer(Tick);
        stopwatch.Start();
        timer.Change(30000, Timeout.Infinite);
        Console.ReadLine();
    }

    private static void Tick(object obj)
    {
        stopwatch.Stop();
        Console.WriteLine(stopwatch.Elapsed.Seconds);
    }
}
Run Code Online (Sandbox Code Playgroud)

我启动应用程序,将本地计算机时间更改为未来 20 秒。在我启动应用程序 30 秒后,Tick 方法仍然被调用。秒表显示 30,我的手机计时器显示 30。