From 4f19f502ebceec6e7069ed252de0e63240da83d9 Mon Sep 17 00:00:00 2001 From: Falcon <12919280+falconfly@user.noreply.gitee.com> Date: Thu, 20 Feb 2025 17:24:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=AF=B4=E6=98=8E=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Falcon.SugarApi/TimedBackgroundTask/Readme.md | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 Falcon.SugarApi/TimedBackgroundTask/Readme.md 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; + } + + } +~~~