0

我不确定如何正确命名这个问题。请自由编辑。

我有一个后台控制台应用程序在我的服务器上运行。控制台应用程序不时(每 5 分钟)发送电子邮件并做一些小事。

该应用程序不是通过任务管理器每 5 分钟启动一次,它在安装过程中打开一次,并且无限循环和 thread.sleep 保持运行。因此,我无法配置任务管理器以使用特定参数打开应用程序。

现在我需要添加一个每 12 小时运行一次的任务,并且我想使用相同的应用程序。该任务包括删除和创建一些文件,但是根据每 5 分钟一次的文件日期检查自上次创建以来是否有 12 小时对我来说似乎有点不明智。

是否有一种非昂贵的方式(无数据库、无日志、无文件创建日期、无多线程)使用我拥有的相同应用程序来勾选 12 小时循环?如果没有,最好的方法是什么?

4

3 回答 3

3

这就是 Windows 任务计划程序的用途。重新发明已经存在的东西是没有意义的。

http://windows.microsoft.com/en-us/windows7/Schedule-a-task

于 2012-06-27T22:31:43.447 回答
1

这是一种在 UTC 午夜调度而不循环的有效方法:

var now=DateTime.UtcNow;
var today=now.Date;
var tomorrow=today.AddDays(1);
var dueTime=tomorrow-now;

System.Threading.Timer timer = null;
timer = new Timer(_ => {
    try
    {
        //do your thing
    }
    finally
    {
        timer.Dispose();
    }
},null,dueTime,TimeSpan.FromMilliseconds(-1d))
于 2012-06-27T23:25:26.613 回答
1

据我了解,您已经有一个等待 5 分钟然后执行任务 A 的循环。现在您想要添加任务 B 以每 12 小时运行一次。我要么用 Timer 对象替换两者,要么在任务 A 运行时每 5 分钟检查一次任务 B 已经运行了多长时间。如果它至少 12 小时,则运行任务 B。类似于

if (last12HourRun.Subtract(DateTime.Now).TotalHours > 12)
  // run task B
  last12HourRun = DateTime.Now;
于 2012-06-27T23:32:12.173 回答