【问题标题】:scheduled task or windows service计划任务或 Windows 服务
【发布时间】:2011-02-18 04:37:18
【问题描述】:

我必须创建一个应用程序,该应用程序将从数据库中读取一些信息,处理数据,将更改写回数据库,然后将包含这些更改的电子邮件发送给某些用户或组。我将使用 c# 编写此过程,并且此过程必须每周在特定时间运行一次。这将在 Windows 2008 Server 上运行。

过去,我总是会使用计时器创建 Windows 服务,并在 app.config 文件中设置运行的时间/日期,以便可以更改它并且只需要重新启动赶上更新。

不过,最近,我看到了一些博客文章,其中推荐编写一个控制台应用程序,然后使用计划任务来执行它。

我已经阅读了很多关于这个问题的帖子,但还没有看到关于哪个过程更好的明确答案。

你们觉得呢?

感谢您的任何想法。

【问题讨论】:

    标签: c# .net windows-services scheduled-tasks


    【解决方案1】:

    如果它是每周一个应用程序,为什么要浪费资源让它在后台运行一周的剩余时间。

    控制台应用程序似乎更合适。

    我使用的典型经验法则是这样的。首先我问几个问题。

    1. 执行频率
    2. #1 的更改频率
    3. 触发机制

    基本上从这里开始,如果执行频率是每天或不那么频繁,我几乎总是倾向于计划任务。然后看更改的频率,如果对计划更改的需求很高,我也会尝试向计划任务倾斜,以允许对计划更改进行无编码更改。最后,如果除了时间之外还有其他触发器的想法,那么我将倾向于使用 Windows 服务来帮助“面向未来”应用程序。例如,每次用户将文件放在 X 文件夹中时运行的需求更改。

    【讨论】:

    • 我同意用尽服务器资源。我想这就是我要走的方向。谢谢
    【解决方案2】:

    如果您只有一个应用程序并且您需要它每周运行一次,那么调度程序可能会很好,因为不需要在系统上运行单独的服务和进程,而系统上大部分时间都是空闲的。

    【讨论】:

      【解决方案3】:

      我遵循的基本规则是:如果您需要持续运行,因为感兴趣的事件可能随时发生,请使用服务(或 UNIX 中的守护程序)。

      如果您只想定期做某事,请使用计划任务(或cron)。

      这里的关键是你的短语"must be run once a week at a particular time" - 去执行计划任务。

      【讨论】:

      • 我就是这么想的。当我一直在阅读帖子时,这就是我这样做的感觉。我会试一试。谢谢