FluentScheduler定时任务的基本使用

[删除(380066935@qq.com或微信通知)]

更好的阅读体验请查看原文:https://www.cnblogs.com/mzflog/p/15965529.html

 本文实例环境及版本 .NetCore3.1

 FluentScheduler 是 .Net 下,可以让你轻松实现定时任务的工具,配置灵活。

Github地址:https://github.com/fluentscheduler/FluentScheduler

文档地址:https://fluentscheduler.github.io/

1、Nuget添加FluentScheduler

2、 新建FluentSchedulerSetup类

 public static class FluentSchedulerSetup
    {
        /// <summary>
        /// FluentScheduler 配置启动
        /// </summary>
        /// <param name="services"></param>
        public static void AddFluentSchedulerSetup(this IServiceCollection services)
        {
            //扫描当前程序集中实现了Registry的类
            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);
        }
    }

3、在Startup->ConfigureServices中添加

services.AddFluentSchedulerSetup();

 4、新建FileStateAsyncJobRegistry类继承自 Registry

 public class FileStateAsyncJobRegistry : Registry
    {
        public FileStateAsyncJobRegistry()
        {
            //不允许重复执行(意思就是每一次任务都必须执行完成后,才能开启下一次执行,防止并发执行带来的问题。)
            NonReentrantAsDefault();
            //每隔10秒执行一次
            Schedule<FileStateAsyncJob>().ToRunNow().AndEvery(10).Seconds();
            //定时任务在凌晨00.01开始执行一次
            //Schedule<FileStateAsyncJob>().ToRunEvery(1).Days().At(00, 01); 26574128

            // 延迟一个指定时间间隔执行一次计划任务。(当然,这个间隔依然可以是秒、分、时、天、月、年等。)
            Schedule<FileStateAsyncJob>().ToRunOnceIn(5).Seconds();

            // 在一个指定时间执行计划任务(最常用。这里是在每天的下午 1:10 分执行)
            Schedule(() => Trace.WriteLine("It's 1:10 PM now.")).ToRunEvery(1).Days().At(13, 10);

            // 立即执行一个在每月的星期一 3:00 的计划任务(可以看出来这个一个比较复杂点的时间,它意思是它也能做到!)
            Schedule<FileStateAsyncJob>().ToRunNow().AndEvery(1).Months().OnTheFirst(DayOfWeek.Monday).At(3, 0);

            // 在同一个计划中执行两个(多个)任务
            Schedule<FileStateAsyncJob>().AndThen<FileStateAsyncJob>().ToRunNow().AndEvery(5).Minutes();

        }

    }

    /// <summary>
    /// 需要执行的job
    /// </summary>
    public class FileStateAsyncJob : IJob
    {
        //public readonly string path = Appsettings.app("AppSettings", "IPath");
        void IJob.Execute()
        {
            Console.WriteLine("执行了一次{0}",DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            //#region 此处为我业务代码 替换成你的即可
            //var task = Task.Run(async () =>
            //{
            //    await SearchEsCommon.UpdateClassSortAsync(path);
            //});
            //#endregion
        }

    }

 

至此完成FluentScheduler的基本使用。

 

才疏学浅,相关文档等仅供自我总结,如有相关问题可留言交流谢谢。