本文实例环境及版本 .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的基本使用。
才疏学浅,相关文档等仅供自我总结,如有相关问题可留言交流谢谢。