提供作业调度功能
vipwan opened this issue · 1 comments
vipwan commented
任务调度ScheduleTask:
实现IScheduleTask
接口,添加 ScheduleTask 特性,指定任务调度时间表达式,即可实现任务调度。
/// <summary>
/// KeepAlive ScheduleTask
/// </summary>
/// <param name="logger"></param>
[ScheduleTask("* * * * *")] //每分钟一次
[ScheduleTask("0/3 * * * *")]//每3分钟执行一次
public class KeepAlive(ILogger<KeepAlive> logger) : IScheduleTask
{
public async Task ExecuteAsync()
{
logger.LogInformation("keep alive!");
await Task.CompletedTask;
}
}
支持从Store中初始化任务调度列表,支持动态添加任务调度,支持动态删除任务调度。
/// <summary>
/// Demo ScheduleTask,用于Store演示
/// </summary>
/// <param name="logger"></param>
public class DemoTask(ILogger<DemoTask> logger) : IScheduleTask
{
public Task ExecuteAsync()
{
logger.LogInformation("Demo Schedule Done!");
return Task.CompletedTask;
}
}
/// <summary>
/// DemoStore演示
/// </summary>
public class DemoStore : IScheduleMetadaStore
{
public Task<IEnumerable<ScheduleTaskMetadata>> GetAllAsync()
{
//模拟从数据库或配置文件中获取ScheduleTaskMetadata
IEnumerable<ScheduleTaskMetadata> metadatas =
[
new ScheduleTaskMetadata(typeof(DemoTask), "* * * * *")
{
Description="测试的Schedule"
}
];
return Task.FromResult(metadatas);
}
}
最后注册DemoStore到DI容器中即可。
builder.Services.AddScheduleMetadaStore<DemoStore>();