System.Timers.Timer长时间间隔

时间:2016-03-10 09:07:27

标签: c# timer

System.Timers.Timer是否足以在较长的时间间隔内调用方法?即适合日常工作和类似的事情。那里有什么更好的东西我应该用于那样的东西吗?

示例:

System.Timers.Timer timer = new System.Timers.Timer();
timer.Elapsed += new System.Timers.ElapsedEventHandler(DoTimedWork);
timer.Interval = 1000 * 60 * 60 * 24; // 24 Hours
timer.Start();

谢谢!

3 个答案:

答案 0 :(得分:2)

您的申请流程是如何启动的?使用具有24小时间隔的System.Timers.Timer是可以的,前提是您可以保证您的进程仍处于活动状态以处理计时器回调 - 您的进程可能有内存泄漏或资源泄漏导致操作系统被杀死它,或者它可能托管在一个常规回收的环境中#34;进程(例如IIS中的应用程序池)。

更好的解决方案是同时拥有两个:在您的应用程序中启动计时器,还有一个cron-job("计划任务"在Windows上),如果它不是,那么它将启动你的程序。已经运行 - 您可以使用系统范围的名为mutex和其他IPC方法来确保一次只运行一个应用程序实例。

答案 1 :(得分:1)

只要您的进程在此期间确实存在(例如因为它是Windows服务),那么计时器就可以了。

如果您需要在指定时间执行某些操作并且无法保证您的流程正在运行,则使用Windows Task Scheduler可能是一个不错的选择。

如果您需要更多选项,可能需要查看Quartz等计划库。

答案 2 :(得分:0)

我使用Hangfire。有一些很棒的功能,如“即发即弃”任务,延迟任务,重复性任务。后台作业保存在持久存储中,如SQL Server,Redis,PostgreSQL,MongoDB等。您可以将其作为控制台应用程序,Windows服务,Azure工作者角色等运行。也是开源的,完全免费用于商业用途