带计时器的 .NET Windows 服务停止响应

2024-01-07

我有一个用 C# 编写的 Windows 服务。它内部有一个计时器,可以定期触发一些功能。所以我的服务的骨架:

public partial class ArchiveService : ServiceBase
{
    Timer tickTack;
    int interval = 10;
    ...
 
    protected override void OnStart(string[] args)
    {
        tickTack = new Timer(1000 * interval);

        tickTack.Elapsed += new ElapsedEventHandler(tickTack_Elapsed);
        tickTack.Start();
    }

    protected override void OnStop()
    {            
        tickTack.Stop();
    }    
    
    private void tickTack_Elapsed(object sender, ElapsedEventArgs e)
    {
        ...
    }
}

它会工作一段时间(例如 10-15 天),然后停止。我的意思是该服务显示为正在运行,但它没有执行任何操作。我做了一些记录,问题可能是计时器,因为在间隔之后它不会调用tickTack_Elapsed 函数。

我正在考虑在没有计时器的情况下重写它,使用无限循环,这会在我设置的时间内停止处理。这也不是一个优雅的解决方案,我认为它可能会对记忆产生一些副作用。

计时器是从 System.Timers 命名空间使用的,环境是 Windows 2003。我在不同服务器上的两个不同服务中使用了这种方法,但两者都产生了这种行为(这就是为什么我认为它以某种方式连接到我的代码或框架本身)。

有人经历过这种行为吗?有什么问题吗?


Edit:

我编辑了这两项服务。到处都有一个很好的 try-catch 和更多的日志记录。第二个定期进行定时器娱乐。从那以后他们都没有停止过,所以如果这种情况再持续一周,我将结束这个问题。到目前为止,谢谢大家。


Edit:

我关闭这个问题,因为什么也没发生。我的意思是我做了一些更改,但这些更改与此事无关,并且从那时起这两个服务都运行没有任何问题。请将其标记为“因不再相关而关闭”。


定时器中未处理的异常被吞掉,它们默默地杀死定时器

将计时器代码的主体包装在 try-catch 块中

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带计时器的 .NET Windows 服务停止响应 的相关文章

随机推荐