C#Timer任务结束后再开启下次任务demo
该代码示例的核心是演示:让Timer只有本次任务执行完毕后才开始下次任务。
Timer示例代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace TestTimer { class Program { static System.Timers.Timer timer1 = new System.Timers.Timer(); static void Main(string[] args) { timer1.AutoReset = true; timer1.Interval = 2000; timer1.Enabled = true; timer1.Elapsed += Timer1_Elapsed; while (true) { Thread.Sleep(5000); Console.WriteLine("运行中:" + Thread.CurrentThread.ManagedThreadId); } } private static void Timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { WriteLog.InserLogs("开始执行!"); timer1.Enabled = false; myTask(); timer1.Enabled = true; WriteLog.InserLogs("结束执行!"); } public static void myTask() { Random random = new Random(); int num = random.Next(1, 4); int sleepTime = 3000; if (num == 1) { sleepTime = 3000; } else if (num == 2) { sleepTime = 5000; } else if (num == 3) { sleepTime = 8000; } Thread.Sleep(sleepTime); WriteLog.InserLogs("耗时任务执行了。耗时:" + sleepTime); } } }
日志代码:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TestTimer { public class WriteLog { /// <summary> /// 记录日志 /// </summary> /// <param name="ErrorMsg"></param> public static void InserLogs(string ErrorMsg) { try { string LogPath = System.AppDomain.CurrentDomain.BaseDirectory + "\\SystemLog\\"; if (!Directory.Exists(LogPath)) { Directory.CreateDirectory(LogPath); } using (StreamWriter sw = new StreamWriter(LogPath + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", true, System.Text.Encoding.UTF8)) { sw.Write(DateTime.Now.ToString() + ":INFO----"); sw.WriteLine(ErrorMsg); sw.WriteLine("---------------------------------------------\r\n"); sw.Close(); } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); } } } }
耗时任务的耗时是随机的,上次任务执行完毕才会执行下次任务。
执行日志:
2020/8/3 19:36:34:INFO----开始执行!
---------------------------------------------
2020/8/3 19:36:42:INFO----耗时任务执行了。耗时:8000
---------------------------------------------
2020/8/3 19:36:42:INFO----结束执行!
---------------------------------------------
2020/8/3 19:36:44:INFO----开始执行!
---------------------------------------------
2020/8/3 19:36:47:INFO----耗时任务执行了。耗时:3000
---------------------------------------------
2020/8/3 19:36:47:INFO----结束执行!
---------------------------------------------
2020/8/3 19:36:49:INFO----开始执行!
---------------------------------------------
2020/8/3 19:36:57:INFO----耗时任务执行了。耗时:8000
---------------------------------------------
2020/8/3 19:36:57:INFO----结束执行!
---------------------------------------------
2020/8/3 19:36:59:INFO----开始执行!
---------------------------------------------
2020/8/3 19:37:07:INFO----耗时任务执行了。耗时:8000
---------------------------------------------
2020/8/3 19:37:07:INFO----结束执行!
---------------------------------------------
2020/8/3 19:37:09:INFO----开始执行!
---------------------------------------------
2020/8/3 19:37:14:INFO----耗时任务执行了。耗时:5000
---------------------------------------------
2020/8/3 19:37:14:INFO----结束执行!
---------------------------------------------
2020/8/3 19:37:16:INFO----开始执行!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2018-08-03 二分查找-学习
2018-08-03 键值对数据结构理解--一致性哈希
2018-08-03 键值数据结构理解