【问题标题】:Task Scheduler in c#C#中的任务计划程序
【发布时间】:2011-10-13 05:15:39
【问题描述】:

我想像 Task Scheduler 2.0 这样调度线程,唯一的问题是我不能使用任务调度程序,它是在操作系统级别而不是程序级别注册的。有没有办法使用任务调度api在程序中调用线程创建?

【问题讨论】:

  • @Khan 我认为你可以通过创建窗口服务来做到这一点
  • 让我改述一下,在 Windows 服务中,我将有多个代码块要执行,我将把它们放在单独的过程中。我需要以不同的方式安排每个程序,例如任务计划 2.0 api,即每天、每周、每月等
  • 您可能在寻找Quartz.Net

标签: c# scheduling


【解决方案1】:

看看System.Threading.Timer

这允许您指定要在给定时间调用的委托。

【讨论】:

  • 我认为 Timer 将在指定的时间间隔内执行,而他希望它在特定的时间和日期执行。他的应用程序可能已关闭并再次打开。然后需要重新计算间隔。另一个缺点是 Timer 不会考虑夏令时。
  • @eypo - 定时器可以设置为在给定间隔后仅发出一次信号,没有重复(使用 Timeout.Infinite - 请参阅msdn.microsoft.com/en-us/library/yz1c7148.aspx)。您对应用程序实例之间的计划丢失提出了一个有效的观点,尽管这可以避免,例如通过将当前计划保留在文件系统中。夏令时 - 事实上,这将是一个问题。根据 cmets,最好查看 Quartz.net 之类的内容。
  • @eypo - 稍微考虑了一下这个问题 - 夏令时应该不是问题,因为直到执行的间隔应该计算为所需日期时间和当前日期时间的差异,应该考虑夏令时。然后,只要计划在设置时保留到文件系统,并在应用程序关闭和重新启动后检查并重新计划,基于 Timer 的解决方案应该可以正常工作。
  • 据我了解夏令时它们不是确定性的。 “例如,在 2008 年,大多数 DST 观测地区在 10 月 5 日将时钟向前移动,但西澳大利亚州在 10 月 26 日移动时钟。”这是来自维基百科。 en.wikipedia.org/wiki/Daylight_saving_time
  • @evpo - 我希望操作系统能够提供此功能,.NET 框架会根据 CultureInfo.CurrentCulture 相应地呈现它,以便在查找两个日期之间的差异时,遵守夏令时。但是,如果实现没有达到标准,我不会感到惊讶 ;-)
【解决方案2】:

快速而肮脏的解决方案是检查时间和日期(比如每分钟)。它不会占用太多 CPU 资源,但执行时间不会精确到一秒。

【讨论】:

    【解决方案3】:

    我最终推送了我自己的调度 API,非常类似于任务调度,它将调度线程而不是进程

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 2013-07-18
      • 1970-01-01
      • 2020-07-25
      • 2012-10-23
      • 2011-05-29
      • 1970-01-01
      相关资源
      最近更新 更多