增加说明文档

This commit is contained in:
Falcon 2025-02-20 17:24:20 +08:00
parent 222342969c
commit 4f19f502eb

View File

@ -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<bool> 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
{
/// <inheritdoc/>
public IServiceCollection AddServices(IServiceCollection services,IConfiguration configuration) {
//其他模块注册
//注册任务
services.AddTimedTask<RunTestUseLogTask>();
//其他模块注册
//返回服务集合
return services;
}
}
~~~