定时任务 QuartZ 组件的简单使用

框架:.NET 5.0 控制台

nuget:Quartz(3.3.3)

IScheduler:与调度程序进行交互的主要API。

IJob:由您希望由调度程序执行的组件实现的接口。

IJobDetail:用于定义Jobs的实例。

ITrigger:定义将在其上执行给定Job的计划的组件。

JobBuilder:用于定义/构建JobDetail实例,该实例定义Jobs实例。

TriggerBuilder:用于定义/构建触发器实例。

代码:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");
        Run();
        Console.ReadKey();
    }

    /// <summary>
    /// 任务调度的使用过程
    /// </summary>
    /// <returns></returns>
    public async static Task Run()
    {
        ISchedulerFactory _schedulerFactory = new StdSchedulerFactory();

        // 创建 调度器
        IScheduler _scheduler = await _schedulerFactory.GetScheduler();

        // 开启 调度器
        await _scheduler.Start();

        // 创建 作业实例
        IJobDetail job = JobBuilder.Create<Jobs>()  //Jobs即我们需要执行的作业
                .WithIdentity("Myjob", "group1")    //我们给这个作业取了个"Myjob"的名字,并取了个组名为"group1"
                .Build();

        // 创建 触发器(也叫时间策略)
        ITrigger trigger = TriggerBuilder.Create()
            //.WithIdentity("Mytrigger", "group1")
            .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever())
            .Build();

        // 将触发器和作业任务绑定到调度器中
        await _scheduler.ScheduleJob(job, trigger);
    }
}

/// <summary>
/// 任务
/// </summary>
public class Jobs : IJob
{
    public virtual Task Execute(IJobExecutionContext context)
    {
        return Console.Out.WriteLineAsync($"job工作了 在{DateTime.Now}");
    }
}

实现:

 

其他实现方式:

1. 使用 System.Timers.Timer 和 System.Threading.Timer 实现定时任务

2. 使用 while 和 sleep 及 Task 实现定时任务

为什么使用 Quartz:

  支持更为复杂的时间策略。

 

参考:

https://blog.csdn.net/xiaolu1014/article/details/103863979

https://blog.csdn.net/xiaolu1014/article/details/103880704

posted @ 2021-11-04 10:04  kueizheng  阅读(137)  评论(0编辑  收藏  举报