NetCore FluentScheduler 定时任务

NetCore FluentScheduler 定时任务使用方式

引用 FluentScheduler

在这里插入图片描述

注册FluentSchedule服务

在程序入口 Program.cs 中注册服务

在这里插入图片描述
创建文件
在这里插入图片描述

定义扫描定时任务类 ServiceCollectionExtensions

using FluentScheduler;
using System.Reflection;

namespace Test.ServiceExtensions
{
    /// <summary>
    /// 扫描当前程序集下面所有的自定义 定时任务
    /// </summary>
    public static class ServiceCollectionExtensions
    {
        //扫描当前程序集中实现了Registry类
        public static void AddFluentScheduler(this IServiceCollection services) { 
        var registrys = Assembly.GetExecutingAssembly().GetTypes()
                .Where(t => !t.IsInterface && !t.IsSealed && !t.IsAbstract && typeof(Registry).IsAssignableFrom(t))
                .Select(s => s.Assembly.CreateInstance(s.FullName)as Registry)?.ToArray();

            //注册同步服务
            JobManager.Initialize(registrys);
        }
    }
}

定义我们要什么时间执行Job的任务 MySqlMigrationRegistry

继承Registry类,可以理解为:该任务执行的计划的作业调度时间策略

using Test.Tasks;
using FluentScheduler;
using Pomelo.EntityFrameworkCore.MySql.Migrations.Internal;

namespace Test.Jobs
{
    /// <summary>
    /// 设置任务时间
    /// </summary>
    public class MySqlMigrationRegistry:Registry
    {
        //常用的几种作业调度计划
        // 1、 立即执行每10秒一次的计划任务。(指定一个时间间隔运行,根据自己需求,可以是秒、分、时、天、月、年等。)
        //Schedule().ToRunNow().AndEvery(10).Seconds();
        // 2、立即执行每10秒一次的计划任务。如果本次任务没有结束,下一次的任务则不会开始,禁止并行运行
        // Schedule().NonReentrant().ToRunNow().AndEvery(10).Seconds();
        // 3、在每天的21:15执行计划任务
        // Schedule(() => Console.WriteLine("www.taohuayuan178.com It's 9:15 PM now.")).ToRunEvery(1).Days().At(21,15);
        // 4、立即执行一个在每月的第一个星期一 3:00 的计划任务
        //Schedule(() => Console.WriteLine("It's 3:00 AM now.")).ToRunNow().AndEvery(1).Months().OnTheFirst(DayOfWeek.Monday).At(3,0);
        // 5、在每周一的21:15执行计划任务
        // Schedule(() => Console.WriteLine("It's 9:15 PM now.")).ToRunEvery(1).Weeks().On(DayOfWeek.Monday).At(21,15);


        public MySqlMigrationRegistry() {
            //每一次任务都必须执行完成后,才能开启下一次执行,防止并发执行
            NonReentrantAsDefault();

            //更改状态任务 判断任务是否超时 每10分钟执行
            Schedule<HourTask>().ToRunEvery(1).Minutes();

         
        }
    }
}

执行任务 HourTask

继承实现IJob接口,可以理解为:具体执行的任务业务逻辑是什么。

using FluentScheduler;

namespace Test.Tasks
{

    /// <summary>
    /// 具体执行的任务
    /// </summary>
    public class HourTask : IJob
    {
        /// <inheritdoc/>
        public void Execute()
        {
         
            try
            {
                Console.WriteLine("正在执行任务!");
            }
            catch (Exception ex)
            {
                Console.WriteLine("执行任务失败!错误:"+ex.Message);
            }
            finally {
                Console.WriteLine("任务结束!");
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值