Quartz.Net来实现C#中的定时任务

发布时间 2023-08-30 17:06:45作者: dywtostrengthen

首先,你需要通过NuGet包管理器或手动下载并添加Quartz.Net库到你的项目中。

 
 using Quartz;
using Quartz.Impl;

public class MyJob : IJob
{
    public Task Execute(IJobExecutionContext context)
    {
        // 在这里编写你的任务逻辑
        Console.WriteLine("任务执行中...");
        return Task.CompletedTask;
    }
}

public class Program
{
    public static async Task Main(string[] args)
    {
        // 创建调度器
        ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
        IScheduler scheduler = await schedulerFactory.GetScheduler();

        // 启动调度器
        await scheduler.Start();

        // 创建一个作业
        IJobDetail job = JobBuilder.Create<MyJob>()
            .WithIdentity("myJob", "group1")
            .Build();

        // 创建一个触发器
        ITrigger trigger = TriggerBuilder.Create()
            .WithIdentity("myTrigger", "group1")
            .StartNow()
            .WithSimpleSchedule(x => x
                .WithIntervalInSeconds(10) // 每10秒执行一次
                .RepeatForever())
            .Build();

        // 将作业和触发器关联到调度器
        await scheduler.ScheduleJob(job, trigger);

        // 等待一段时间,让调度器执行任务
        await Task.Delay(TimeSpan.FromSeconds(60));

        // 停止调度器
        await scheduler.Shutdown();
    }
}

在上面的示例中,我们定义了一个名为MyJob的任务类,它实现了IJob接口。在Execute方法中,你可以编写你的任务逻辑。

然后,在Main方法中,我们创建了一个调度器并启动它。接着,我们使用JobBuilder创建了一个作业,并使用TriggerBuilder创建了一个触发器。这里的触发器使用了简单的重复计划,每10秒执行一次。

最后,我们将作业和触发器关联到调度器,并等待一段时间让调度器执行任务。最后,我们关闭调度器。

这只是一个简单的示例,Quartz.Net还支持更复杂的调度需求,比如指定特定的日期和时间执行任务,以及设置任务的优先级等。你可以通过查阅Quartz.Net的文档来了解更多详细信息和示例。