fin*_*ook 12 c# datetime multithreading thread-sleep
我正在循环中运行一个进程,它对每天的操作数量有限制.当它达到这个限制时,我现在已经检查了循环中的时间,看它是否是一个新的日期.
最好的选择是:
Dan*_*ert 16
不要将Thread.Sleep用于此类事情.使用计时器并计算您需要等待的持续时间.
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);
Run Code Online (Sandbox Code Playgroud)
将代理替换为/* Do Work */将以指定的时间间隔恢复工作的回调.
编辑:如评论中所述,如果您假设应用程序将等待的"已用时间"与实际时间匹配,则可能会出现许多问题.因此,如果时间对您很重要,最好使用较小的轮询间隔来确定时钟是否已达到您希望工作发生的时间.
更好的方法是使用Windows任务计划程序在所需的时间运行您的任务.这比尝试在代码中自己实现它要可靠得多.