如果功能没有完成,计时器会继续吗

Do timers continue if function didn't finish

我目前正在创建一个 Windows 服务,该服务使用计时器间隔。此计时器每秒重复一次,但完成计时器的 Elapsed 事件可能需要一秒以上的时间,该事件创建如下:

Timer timer = new Timer();
timer.Enabled = true;
timer.Interval = 1000; // 1 second
timer.Elapsed += myFunction;

现在是一个简单的问题:即使 Elapsed 事件尚未完成,该计时器是否会继续,或者计时器会等待并在 Elapsed 事件完成后继续?

是的,确实如此

If the SynchronizingObject property is null, the Elapsed event is raised on a ThreadPool thread. If processing of the Elapsed event lasts longer than Interval, the event might be raised again on another ThreadPool thread. In this situation, the event handler should be reentrant.

Source

System.Timers.Timer class 有一个 AutoReset 属性。

如果设置为false,定时器只会运行一次,允许您在功能结束后再次启动它。

如果您将其设置为 true,则计时器不会停止并且每秒 运行 您的函数,除非弹出异常。

默认情况下,此 属性 is set to true