Timer定时器,每天固定时间执行

下面是之前在项目中使用到的定时器实现代码(每当项目重新启动时执行ExecutionTimer方法)

executionTime :定时执行的时间,我设置的是每天19点定时执行一次,也可以把这个拎出去,当作参数传入,做次封装

timeSpan :当前时间与设定执行时间的间隔,当前时间小于设定时间,该值为正数,反之为负数(单位毫秒)

interval :每当项目重新启动时计算出当前时间距离执行时间的间隔,其中 timeSpan + 1 是为了防止重启项目时当前时间恰好与执行时间一致,导致 timeSpan 为 0,使定时器报错(第一个定时器执行的时间间隔,且只执行一次)

  		/// /// 执行定时器(每天定时19点执行相应方法)/// public static void ExecutionTimer(){DateTime executionTime = Convert.ToDateTime($"{DateTime.Now:yyyy-MM-dd} 19:00:00");DateTime nowTime = DateTime.Now;var timeSpan = (executionTime - nowTime).TotalMilliseconds;var interval = timeSpan >= 0 ? timeSpan + 1 : (12 * 60 * 60 * 1000) + timeSpan;// 重启网站时,如果此时的时间距离定时器执行的时间间隔大于30分钟,则执行相应方法if (timeSpan > 30 * 60 * 1000 || (timeSpan < -1 * 30 * 60 * 1000 && timeSpan < 0)){ExecutionMethod();}System.Timers.Timer timer = new System.Timers.Timer(interval) { AutoReset = false, Enabled = true };timer.Elapsed += (o, e) =>{ExecutionMethod();System.Timers.Timer newTimer = new System.Timers.Timer(12 * 60 * 60 * 1000) { AutoReset = true, Enabled = true };newTimer.Elapsed += (newO, newE) =>{ExecutionMethod();};newTimer.Start();};timer.Start();}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部