c# - 线程 sleep /等到新的一天

标签 c# multithreading datetime thread-sleep

我在一个循环中运行一个进程,它对它每天执行的操作数有限制。当它达到这个限制时,我目前已经让它循环检查时间以查看它是否是新日期。

最好的选择是:

  • 不断检查新日期的时间
  • 计算到午夜还有多少秒,然后睡那段时间
  • 还有别的吗?

最佳答案

不要为这种类型的事情使用 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/

相关文章:

c++ - 多线程效率不高 : Debugging False Sharing?

c# - Windows FILETIME 包含什么?尝试转换为 PHP 日期/时间

c# - 转换 11/1/2012 3 :42:09 AM to November 1 , 2012

c++ - 如何使用 C++ 将时区化的 XML 类型 dateTime 转换为 time_t

c# - 将 Eval 保存为 bool 而不隐藏代码

c# - 如何在 C# 中调用需要证书的 Web 服务?

c++ - R并行写入SEXP结构

c# - ANTLR 和 c# - 从哪里开始?

c# - StyleCop 规则适用于不同的支撑风格,而不是仅仅禁用它?

java - 文字的字符串分配