ASP.NET Core基础之定时任务(二)-Quartz.NET入门

阅读本文你的收获

  1. 了解任务调度框架QuartZ.NET的核心构成
  2. 学会在ASP.NET Core 中使用QuartZ.NET

在项目的开发过程中,难免会遇见需要后台处理的任务,例如定时发送邮件通知、后台处理耗时的数据处理等,上次分享了ASP.NET Core中实现定时任务的第一种方式 托管服务+Timer,这种方式适用于比较简单的定时任务场景,对于更复杂的场景,我们可以使用HangFire和QuartZ.NET等成熟的任务调度框架。
这次我们对QuartZ.NET任务调度框架做一个入门。

一、什么是QuartZ.NET?

Quartz.Net 是一个.NET程序集,是非常流行的 Java 作业调度系统 Quartz 的 C#实现。

Quartz.Net 是一款功能齐全的任务调度系统,从小型应用到大型企业级系统都能适用。
功能齐全体现在触发器的多样性上面,即支持简单的定时器,也支持 Cron 表达式;即能执行重复的作业任务,也支持指定例外的日历;任务也可以是多样性的,只要继承 IJob 接口即可。

对于小型应用,Quartz.Net 可以集成到你的系统中,对于企业级系统,它提供了 Routing 支持,提供了 Group 来组织和管理任务,此外还有持久化、插件功能、负载均衡和故障迁移等满足不同应用场景的需要。

二、QuartZ.NET中的核心对象

  1. Scheduler - 调度器。与调度程序交互的主要API。
  2. IJob - 作业。你想要调度器执行的任务组件需要实现该接口 。
  3. JobDetail -用于定义作业详细信息。
  4. Trigger - 触发器。定义执行给定作业的计划的组件。
  5. JobBuilder - 用于定义/构建JobDetail 实例,用于定义作业的实例。
  6. TriggerBuilder - 用于定义/构建触发器实例。

Scheduler 的生命期,从 SchedulerFactory 创建它时开始,到 Scheduler 调用shutdown() 方法时结束;

Scheduler 被创建后,可以增加、删除和列举 Job 和 Trigger,以及执行其它与调度相关的操作(如暂停 Trigger)。

但是,Scheduler 只有在调用 start() 方法后,才会真正地触发 trigger(即执行 job)

三、入门案例

开发环境

平台版本是:.NET6
开发框架:ASP.NET Core WebApi
开发工具:Visual Studio 2022

  1. 安装QuartZ.NET的Nuget包
    下载QuartZ

  2. 编写一个定时作业,必须实现IJob接口

    using Quartz; //引用QuartZ命名空间
    
    //新建一个IJob的实现类
    public class FirstJob : IJob
    {
        /// <summary>
        /// 执行具体任务
        /// </summary>
        /// <param name="context">作业执行上下文</param>
        /// <returns></returns>
        public Task Execute(IJobExecutionContext context)
        {
            return Task.Factory.StartNew(() => {
                       System.Console.WriteLine("我的第一个定时任务");
                       //实际项目中 一般执行一些定时任务,如:统计数据、定时发送信息、定时同步数据等
                   });
        }
    }
    
  3. 启动定时任务,以下例子为 在WebApi控制器中启动定时任务

    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        [HttpGet("TestQuartZ")]
        public async Task<IActionResult> TestQuartZ()
        {
            //1. 创建一个调度器
            var scheduler = await new StdSchedulerFactory().GetScheduler();
            await scheduler.Start(); //启动
            //2. 创建一个作业,
            var job = JobBuilder.Create<FirstJob>().Build();
            //3. 创建一个简单触发器
            //var trigger = TriggerBuilder.Create()
            //  .WithSimpleSchedule(x =>{
            //     x.WithRepeatCount(3)       //循环次数
            //      .WithIntervalInSeconds(1);//间隔时间
            //}).Build();
            //3. 创建Cron触发器(Cron触发器比简单触发器更加强大)
            var trigger = TriggerBuilder.Create()
                .WithCronSchedule("* * * * * ? *")
                .Build();
            //将三个对象,连接在一起
            await scheduler.ScheduleJob(job, trigger);
            return Ok();
        }
    }
    

以上例子中演示了两种触发器的使用方式。
对于Simple触发器,设置规则比较简单,可以设置循环执行次数,间隔时间等。仅满足基本使用,对于想要实现更复杂的时间规则设置,如某年某月某日定时定点执行则需要用到Cron触发器,可以指定Cron表达式。在线生成CRON表达式

  1. 可以在Swagger中,调用/api/values/TestQuartZ接口来 启动以上定时任务。一旦定时任务启动,可以看到FirstJob类中的Execute方法每秒都会被执行一次。

结语

本文对于QuartZ.NET做了一个入门级的案例。更多高级用法将在后续分享。如果本文对你有帮助的话,请点赞+评论+关注,或者转发给需要的朋友。

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: .NET Core 可以使用多种方式来实现定时任务。 1. 使用 System.Threading.Timer 类: 这是一个内置类,可以在指定的时间间隔内执行指定的方法。 例如: ``` using System; using System.Threading; namespace ConsoleApp1 { class Program { static void Main(string[] args) { Timer t = new Timer(ExecuteTask, null, 0, 2000); Console.ReadKey(); } private static void ExecuteTask(Object state) { Console.WriteLine("Task Executed"); } } } ``` 2. 使用 Hangfire 第三方库: Hangfire 是一个开源的任务调度库,可以用于创建、调度和监控后台任务。 安装 Hangfire 库: ``` Install-Package Hangfire ``` 在 Startup 类的 Configure 方法中添加以下代码: ``` app.UseHangfireServer(); app.UseHangfireDashboard(); ``` 然后,可以使用以下代码在应用程序中创建定时任务: ``` using Hangfire; namespace ConsoleApp1 { class Program { static void Main(string[] args) { RecurringJob.AddOrUpdate(() => Console.WriteLine("Task Executed"), Cron.Minutely); Console.ReadKey(); } } } ``` 3. 使用 Quartz.NET 第三方库: Quartz.NET 是一个开源的任务调度库,支持多种触发器和作业执行程序。 安装 Quartz.NET 库: ``` Install-Package Quartz ``` 使用以下代码创建定时任务: ``` using Quartz; using Quartz.Impl; namespace ConsoleApp1 { class Program { static void Main(string[] args) { ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); IScheduler scheduler = schedulerFactory.GetScheduler().Result; scheduler.Start ### 回答2: .NET Core 定时任务是在.NET Core 框架下实现的一种功能,用于在指定的时间间隔或特定时间点自动执行特定的任务。 在.NET Core中,有多种不同的方式可以实现定时任务。一种常见的方法是使用 System.Threading.Tasks 命名空间中的 Task 和 TaskScheduler类来执行异步任务,并结合定时器 Timer 类来达到定时执行的效果。开发人员可以在应用程序启动时创建一个定时器对象,并设置触发间隔或特定时间点,然后指定一个任务(或者使用委托)作为定时器的回调函数,在触发时执行。 另一种方式是使用第三方库,如Quartz.NetQuartz.Net 是一个功能强大的开源定时任务库,它提供了更多的灵活性和精确性,可以支持更复杂的定时任务调度需求。通过Quartz.Net,开发人员可以创建作业和触发器,设置任务执行间隔和时间点,还可以配置任务的失败和重试策略,实现更加高级的定时任务调度。 无论使用哪种方式,都可以在.NET Core应用程序中实现定时任务定时任务可以用于各种应用场景,例如定时数据备份、日志清理、定时邮件发送等。通过合理地安排定时任务,开发人员可以提高应用程序的稳定性和可靠性,实现一定程度的自动化操作。 总之,.NET Core 提供了多种方式来实现定时任务,开发人员可以根据具体需求选择合适的方法。无论是使用内置的定时器类还是使用第三方库,都可以在.NET Core应用程序中实现定时任务的调度和执行。 ### 回答3: .NET Core是一个跨平台的、开源的开发框架,具有丰富的功能和强大的性能,可以帮助开发者构建高性能的应用程序。其中,定时任务.NET Core框架的一个常见需求。 在.NET Core中,可以使用多种方式实现定时任务。以下是其中两种常用的方式: 1. 使用Timer类:Timer类位于System.Threading命名空间中,可以用于创建定时任务。通过指定一个时间间隔和一个回调方法,Timer类可以在指定的时间间隔后重复执行回调方法。开发者可以根据业务需求使用Timer类,在指定的时间间隔内执行任务。 2. 使用Hangfire库:Hangfire是一个.NET Core中常用的开源库,用于管理和调度定时任务。Hangfire库提供了简单易用的API,可以轻松实现任务的调度和管理。通过在代码中配置定时任务的执行时间和具体的执行逻辑,Hangfire库可以在指定的时间点执行任务。 以上是.NET Core中实现定时任务的两种常用方式,开发者可以根据具体需求选择合适的方式。无论是使用Timer类还是Hangfire库,都可以帮助开发者轻松实现定时任务,提升应用程序的灵活性和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

采石之人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值