diff --git a/Falcon.SugarApi/TimedBackgroundTask/Readme.md b/Falcon.SugarApi/TimedBackgroundTask/Readme.md new file mode 100644 index 0000000..86aeed4 --- /dev/null +++ b/Falcon.SugarApi/TimedBackgroundTask/Readme.md @@ -0,0 +1,53 @@ +## 后台任务模块 TimedTask + +### 设计目标 + +1. 后台独立运行的任务模块。插件通过继承TimedTask类实现业务类,并通过IServiceCollection.AddTimedTask进行注册。 +1. 业务类需要重写Run方法实现业务逻辑。 +1. 业务类通过重写CronSchedule属性实现任务调度,该属性提供cron表达式。 +1. 业务类注册后首先调用一次业务实现,然后按照cron表达式定义的时间调度执行业务逻辑。 +1. 本次业务逻辑结束后才会调度下一次,不会存在重复执行的情况。 + +### 业务实现 +~~~c# + //通过继承TaskBase实现后台任务 + public class RunTestUseLogTask:TaskBase + { + public RunTestUseLogTask(IServiceProvider service) : base(service) { + } + //cron表达式。在每分钟的10秒时运行 + public override string CronSchedule => "10"; + + //测试用业务逻辑 任务开始2秒后和5秒后记录日志。 + public override async Task Run(CancellationToken cancellationToken) { + await Task.Run(() => { + Thread.Sleep(2 * 1000); + }); + this.Logger.LogInformation($"RunTestUseLogTask run 1 at {DateTime.Now:yyyy-MM-dd HH:mm:ss}"); + await Task.Run(() => { + Thread.Sleep(3 * 1000); + }); + this.Logger.LogInformation($"RunTestUseLogTask run 2 at {DateTime.Now:yyyy-MM-dd HH:mm:ss}"); + return await Task.FromResult(true); + } + } +~~~ +### 后台任务注册 +~~~c# + public class ServicePlugin:IServicePlugin + { + /// + public IServiceCollection AddServices(IServiceCollection services,IConfiguration configuration) { + //其他模块注册 + + //注册任务 + services.AddTimedTask(); + + //其他模块注册 + + //返回服务集合 + return services; + } + + } +~~~