实现一:
static void Main(string[] args) { //实现每隔两秒钟输出一次 var t = 0; var timer = new System.Timers.Timer(); timer.Interval = 600000;//单位毫秒,这里是10分钟 timer.Enabled = true; Console.WriteLine($"开始写入{DateTime.Now}"); timer.Elapsed += (o, a) => { if (t == 0) { Console.WriteLine($"写入{DateTime.Now}"); } else { //定时任务结束 timer.Stop(); timer.Enabled = false; } }; timer.Start(); Console.Read(); }
实现二: 其实和实现一类似
static protected void SetOndDayTimer() { Console.WriteLine($"我是定时任务-------{DateTime.Now}"); System.Timers.Timer timer = new System.Timers.Timer(60000);//周期调用方法间隔时间ms timer.Elapsed += new System.Timers.ElapsedEventHandler(Update);//绑定事件方法 timer.AutoReset = true;//设置一直循环调用;若设置timer.AutoReset = false;只调用一次绑定方法 timer.Start();//开启定时器事件或者写成timer.Enabled = true; } static private void Update(object sender, ElapsedEventArgs e) { Console.WriteLine($"定时任务执行-------{DateTime.Now}"); }
实现三:此方法只适合在循环中使用属于间隔执行(此方法只能在60秒以内的条件且不包含60秒,超过60s,span.Seconds又从1开始计算了)
//实现每隔两秒钟输出一次 Console.WriteLine($"开始写入{DateTime.Now}"); DateTime ProgramRunTime = DateTime.Now;//第一次执行的时间 DateTime ThreadTime = DateTime.Now;//当前执行时间 TimeSpan span = ThreadTime - ProgramRunTime; if (span.Seconds > 2)//每隔2秒执行一次 { Console.WriteLine($"写入{DateTime.Now}"); } Console.Read();
实现四:
//延迟调用 DelayInvoke(() => { //DO }, 1800); //定时调用 RegularInvoke(() => { //DO }, 1800);
/// <summary> /// 延迟调用 /// </summary> /// <param name="method"></param> /// <param name="delayTime"></param> public static void DelayInvoke(Action method, int delayTime = 2000) { RegularInvoke(method, delayTime, false); } /// <summary> /// 定时调用 /// </summary> /// <param name="method"></param> /// <param name="delayTime"></param> /// <param name="aotoReset"></param> public static void RegularInvoke(Action method, int delayTime, bool aotoReset = true) { System.Timers.Timer timer = new System.Timers.Timer(delayTime); timer.Elapsed += new System.Timers.ElapsedEventHandler((a, b) => { method(); }); //执行一次 false timer.AutoReset = aotoReset; //是否执行System.Timers.Timer.Elapsed事件 timer.Enabled = true; }
或者
Console.WriteLine($"执行1{DateTime.Now}"); Task.Factory.StartNew(() => { Console.WriteLine($"执行2{DateTime.Now}"); Task.Delay(10000).Wait(); Console.WriteLine($"延迟执行{DateTime.Now}"); }); Console.ReadKey();