漫谈C#的定时执行程序
1、写法1 task的lambda表达式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #region 写法1 task的lambda表达式 //static void Main() //{ // // 创建并启动两个任务 // Task task1 = Task.Run(() => DoTask(1)); // Task task2 = Task.Run(() => DoTask(2)); // // 等待任务完成 // Task.WaitAll(task1, task2); // Console.WriteLine("所有任务已完成。"); // // Console.ReadLine(); //} //static void DoTask(int taskId) //{ // Console.WriteLine("任务 {0} 正在执行...", taskId); // Thread.Sleep(2000); // 模拟任务执行时间 // Console.WriteLine("任务 {0} 已完成。", taskId); //} #endregion |
2、写法2 async/await关键字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | static async Task Main() { // 创建并启动两个任务 Task task1 = DoTaskAsync(1); Task task2 = DoTaskAsync(2); // 等待任务完成 await Task.WhenAll(task1, task2); Console.WriteLine( "所有任务已完成。" ); Console.ReadLine(); } static async Task DoTaskAsync( int taskId) { Console.WriteLine( "任务 {0} 正在执行..." , taskId); await Task.Delay(2000); // 模拟任务执行时间 Console.WriteLine( "任务 {0} 已完成。" , taskId); } |
3、写法3 定时执行 每天18点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #region 定时执行 每天18点 static async Task Main() { Console.WriteLine( "定时服务启动(每天18点)!当前时间:{0}" , DateTime.Now); while ( true ) { // 计算当前时间距离下一个18点的时间间隔 DateTime now = DateTime.Now; DateTime nextExecutionTime = new DateTime(now.Year, now.Month, now.Day, 18, 0, 0); if (now >= nextExecutionTime) { nextExecutionTime = nextExecutionTime.AddDays(1); } TimeSpan timeUntilNextExecution = nextExecutionTime - now; // 等待到下一个18点 await Task.Delay(timeUntilNextExecution); // 执行你的操作 Console.WriteLine( "定时任务触发了!当前时间:{0}" , DateTime.Now); } } #endregion |
4、可以考虑使用第三方库,如Quartz.NET,它提供了更丰富的定时调度功能。
当然还有很多其他写法,欢迎讨论指导
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?