【发布时间】:2016-03-22 22:19:52
【问题描述】:
伙计们,我正在基于 .NET 的 Windows 服务中实现一个例程,并在其中使用 Threading.Timer 任务
protected override void OnStart(string[] args)
{
base.OnStart(args);
_startupTask = Task.Factory.StartNew(StartupAction, CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default);
}
在我的 StartupAction 中,我定义了一个 Threading.Timer,如下所示:
private void StartupAction()
{
System.Threading.Timer infamousTimer;
infamousTimer = new System.Threading.Timer(new TimerCallback(runMeEveryHour), null, new TimeSpan(0), new TimeSpan(1, 0, 0));
}
人们会认为这很简单,但由于某种原因,它并不总是有效(在某些 PC 上有效,但在其他 PC 上无效)。
有谁知道罪魁祸首或环境依赖性是什么?
谢谢
当定时器超出范围时,不会触发回调。请参阅下面的答案
【问题讨论】:
-
为什么要使用任务?为什么不直接在
OnStart中启动线程计时器?当然,您的实际用例可能更复杂,而您只是对其进行了简化,但如果将其移到任务之外会发生什么? -
@Lloyd 是的,我可以做得不那么花哨,但为什么会产生差异!
标签: c# multithreading timer windows-services