gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 04:47:46 26 4
gpt4 key购买 nike

我有一个用 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 函数。

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

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

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


编辑:

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


编辑:

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

最佳答案

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

将定时器代码的主体包装在 try-catch block 中

关于c# - 带计时器的 .NET Windows 服务停止响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/397744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com