首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >具有计时器的.NET Windows服务停止响应

具有计时器的.NET Windows服务停止响应
EN

Stack Overflow用户
提问于 2008-12-29 13:55:17
回答 7查看 13K关注 0票数 18

我有一个用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命名空间中使用,环境是Windows2003。我在不同服务器上的两个不同服务中使用了这种方法,但两者都产生了这种行为(这就是为什么我认为它以某种方式连接到我的代码或框架本身)。

有没有人经历过这种行为?会出什么问题呢?

编辑:

我编辑了这两个服务。其中一个得到了很好的尝试--到处捕捉和更多的日志记录。第二个人定期进行计时器再利用。从那以后他们都没有停止,所以如果这种情况再持续一周,我将结束这个问题。到目前为止,感谢大家。

编辑:

我结束这个问题是因为什么都没发生。我的意思是,我做了一些更改,但这些更改与这件事并不相关,从那时起,这两个服务都运行得很顺利。请将其标记为“已关闭,因为不再相关”。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-07-07 16:42:42

就像许多受访者指出的那样,异常会被计时器吞噬。在我的windows服务中,我使用System.Threading.Timer。它有变化(...)方法,它允许您启动/停止该计时器。可能出现异常的地方可能是可重入性问题--当tickTack_Elapsed的执行时间超过计时器周期时。通常我会像这样编写计时器循环:

    void TimeLoop(object arg)
    {
        stopTimer();

        //Do some stuff

        startTimer();
    }

您还可以lock(...)您的主循环,以防止重入。

票数 3
EN

Stack Overflow用户

发布于 2008-12-29 14:39:01

计时器中未处理的异常将被接受,并静默地终止计时器。

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

票数 18
EN

Stack Overflow用户

发布于 2008-12-29 14:03:02

我以前在计时器和循环服务中都看到过这种情况。通常情况下,捕获的异常会停止计时器或循环线程,但不会将其作为异常恢复的一部分重新启动。

关于你的其他观点...我不认为计时器有什么“优雅”之处。对我来说,在代码中看到循环操作比在计时器方法中更直接。但是优雅是主观的。

内存问题?如果你写得很好,就不会。如果Thread.Sleep()设置不正确,可能会给处理器带来负担。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/397744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档