你的想法很重要-大家都来谈 (C)Copyright 2012 by WeiPt

漫谈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,它提供了更丰富的定时调度功能。

当然还有很多其他写法,欢迎讨论指导

posted @   weipt  阅读(1473)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?

你的想法很重要-大家都来谈 (C)Copyright 2012 by WeiPt
点击右上角即可分享
微信分享提示