下面是之前在项目中使用到的定时器实现代码(每当项目重新启动时执行ExecutionTimer方法)
executionTime :定时执行的时间,我设置的是每天19点定时执行一次,也可以把这个拎出去,当作参数传入,做次封装
timeSpan :当前时间与设定执行时间的间隔,当前时间小于设定时间,该值为正数,反之为负数(单位毫秒)
interval :每当项目重新启动时计算出当前时间距离执行时间的间隔,其中 timeSpan + 1 是为了防止重启项目时当前时间恰好与执行时间一致,导致 timeSpan 为 0,使定时器报错(第一个定时器执行的时间间隔,且只执行一次)
/// <summary>
/// 执行定时器(每天定时19点执行相应方法)
/// </summary>
public static void ExecutionTimer()
{
DateTime executionTime = Convert.ToDateTime($"{DateTime.Now:yyyy-MM-dd} 19:00:00");
DateTime nowTime = DateTime.Now;
var timeSpan