本文實例環境及版本 .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的基本使用。
才疏學淺,相關文檔等僅供自我總結,如有相關問題可留言交流謝謝。