漫谈C#的定时执行程序
1、写法1 task的lambda表达式
#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关键字
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点
#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,它提供了更丰富的定时调度功能。
当然还有很多其他写法,欢迎讨论指导