gpt4 book ai didi

c# - 如何在 C# 中的特定确切时间(离现在很远)执行代码?

转载 作者:太空宇宙 更新时间:2023-11-03 20:07:16 26 4
gpt4 key购买 nike

我正在开发一个 Windows 服务,它必须在特定的确切时间执行一个方法。

当服务启动时,它会从 SQL Server 数据库中提取几个不同的日期时间,然后应该为每个日期时间启动一个线程。每个线程应该等到确切的 DateTime 值,然后做一些工作,然后再次等待更短的时间,然后再次做一些最后的工作。

我不想使用 System.Timers.Timer,因为:

  • 方法必须在指定的确切时间执行
  • 这个确切时间可能超过 24 小时
  • 我需要向 Elapsed 事件传递一个参数

我该如何实现?

谢谢。

编辑:我昨晚有一个想法,如果我写一个动态轮询计时器会怎么样?例如,如果到期日期时间超过 12 小时,它可以每小时轮询一次时间以重新同步。然后,如果到期日期时间超过 3 小时,它可以每 30 分钟轮询一次时间,依此类推......你怎么看?这会是一个糟糕的代码吗?

再次感谢。

最佳答案

您不能使用 System.Timers.Timer 将参数传递给 tick 事件,但可以使用 System.Threading.Timer。延迟时间“大于24小时”是没有问题的。定时器使用以毫秒表示的 32 位周期。 2^31 毫秒计算出大约 24.85 天。还有一个重载允许您使用 64 位有符号整数指定延迟。 2^63 毫秒是……几亿年。

但是让这些计时器在未来的确切日期/时间滴答是有问题的,因为您必须指定延迟时间,而时钟更改会导致您的延迟太短或太长(想想夏令时,或用户启动的时间更改)。您可以指定滴答时间并让计时器每秒轮询一次当前时间。这有点丑陋,但它确实有效。

另一种选择是使用 Windows Waitable Timer对象,它允许您设置准确的日期和时间。不幸的是,该框架不包含相应的对象。几年前我写了一篇关于它的文章并发布了代码。该文章不再在线提供,但您可以从 http://mischel.com/pubs/waitabletimer.zip 下载代码.

关于c# - 如何在 C# 中的特定确切时间(离现在很远)执行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22355167/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com