漫谈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,它提供了更丰富的定时调度功能。
当然还有很多其他写法,欢迎讨论指导

浙公网安备 33010602011771号