漫谈C#的定时任务执行

时间:2023/9/13 8:45:18 赞:0 踩:0 阅:308 标签:定时任务

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

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

评论一下

发表评论

注册用户登录后才能发表评论,请登录注册