我在一个循环中运行一个进程,它对它每天执行的操作数有限制。当它达到这个限制时,我目前已经让它循环检查时间以查看它是否是新日期。
最好的选择是:
- 不断检查新日期的时间
- 计算到午夜还有多少秒,然后睡那段时间
- 还有别的吗?
最佳答案
不要为这种类型的事情使用 Thread.Sleep。使用 Timer并计算您需要等待的时间。
var now = DateTime.Now;
var tomorrow = now.AddDays(1);
var durationUntilMidnight = tomorrow.Date - now;
var t = new Timer(o=>{/* Do work*/}, null, TimeSpan.Zero, durationUntilMidnight);
将 /* Do Work */
委托(delegate)替换为将在指定时间间隔恢复工作的回调。
编辑如评论中所述,there are many things that can go wrong如果您假设应用程序等待的“耗时”将与真实世界的时间相匹配。出于这个原因,如果时间对您很重要,最好使用较小的轮询间隔来确定时钟是否已到达您希望工作发生的时间。
更好的方法是使用 Windows 任务计划程序在所需时间运行您的任务。这比尝试自己在代码中实现要可靠得多。
关于c# - 线程 sleep /等到新的一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7445741/