多叉树抽象任务依赖-任务调度系列1
系统在空闲时可以跑一些任务来进行一些统计方面的运算,大多是取数据,插数据,统计数据。这些任务有时候是有依赖关系的,比如A任务统计依赖B任务完成,起初我们把B任务安排在2点跑,A任务3点跑,可是B任务如果在一个小时内不能完成,在跑A任务的时候就会有问题。那么必须要保证B任务是完成的情况下才开跑A任务。
所以是不是可以考虑用一个链表这种数据结构把任务串起来执行,并且也保证每个任务的业务都在代码层面上分开。
类似:
代码示例:
BaseTask:
public abstract class BaseTask { private String id; public abstract void execute(); public String getId() { return id; } public void setId(String id) { this.id = id; } }
SimpleBaseTask:
public abstract class SimpleBaseTask extends BaseTask{ public void execute() { beforeExecute(); doTask(); doNextTask(); afterExecute(); } public void doNextTask(){ if(nextTasks != null){ for (BaseTask task : nextTasks) { task.execute(); } } } public abstract void beforeExecute(); public abstract void afterExecute(); public abstract void doTask(); private String name; private BaseTask parentTask; // 每一个任务都可以拥有多个后续任务 这些任务都依赖本任务的执行完成 private List<BaseTask> nextTasks; public String getName() { return name; } public void setName(String name) { this.name = name; } public BaseTask getParentTask() { return parentTask; } public void setParentTask(BaseTask parentTask) { this.parentTask = parentTask; } public List<BaseTask> getNextTasks() { return nextTasks; } public void setNextTasks(List<BaseTask> nextTasks) { this.nextTasks = nextTasks; } }
ProcessGroup:
public abstract class ProcessGroup<T extends BaseTask> { // 每个任务进程执行的第一个任务逻辑 private BaseTask firstTask; public BaseTask getFirstTask() { return firstTask; } public void setFirstTask(BaseTask firstTask) { this.firstTask = firstTask; } public abstract void beforeProcess(); public abstract void afterProcess(); public void doProcess(){ beforeProcess(); firstTask.execute(); afterProcess(); } }
SimpleProcessGroup :
public class SimpleProcessGroup extends ProcessGroup<SimpleBaseTask>{ @Override public void beforeProcess() { System.out.println("beforeProcess"); } @Override public void afterProcess() { System.out.println("afterProcess"); } }
这种抽象局限性太大,把所有任务串联起来会导致任务需要手动拆分,依赖关系植入代码,难以维护。并且多任务依赖依然无法符合要求。
所以需要,更加强大的一个任务调度系统来实现这种灵活的任务依赖关系。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述