有源码 国庆在家,从0手撸一个依赖任务加载框架( 四 )


super.run();
try {
// 模拟随机时间
Random random = new Random();
Thread.sleep(random.nextInt(1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
// 第三方框架内部使用同步加载
// completeDAGTask方法写在run方法末尾即可
completeDAGTask();
}
// 第三方框架内部使用异步加载
// completeDAGTask方法需要写进成功回调
/*onLibrarySuccess(){
completeDAGTask();
}*/
tips:加载任务内部未开线程,completeDAGTask方法写在run方法的末尾,感知初始化结束;加载任务内部使用多线程,需要将completeDAGTask方法写进加载成功回调 。
第三步,根据任务的依赖关系构建DAGProject并执行 。
回首一开始出现的复杂依赖关系:

有源码 国庆在家,从0手撸一个依赖任务加载框架

文章插图
我们模拟对应的任务,任务A、B、C、D、E,构建DAGProject如下:
ATask a = new ATask("ATask");
BTask b = new BTask("BTask");
CTask c = new CTask("CTask");
DTask d = new DTask("DTask");
ETask e = new ETask("ETask");
DAGProject dagProject = new DAGProject.Builder()
.addDAGTask(b)
.addDAGTask(c)
.addDAGTask(a)
.addDAGTask(d)
.addDAGTask(e)
.addDAGEdge(b, a)
.addDAGEdge(c, a)
.addDAGEdge(d, b)
.addDAGEdge(d, c)
.addDAGEdge(e, b)
.builder();
DAGScheduler dagScheduler = new DAGScheduler();
dagScheduler.start(dagProject);
依赖任务执行结果如下:
有源码 国庆在家,从0手撸一个依赖任务加载框架

文章插图
可以看到依赖任务被拆开成A、C、B、E、D的顺序进行执行 。
/ 结语 /
行文至此,总算凑到了结尾,1202年了,居然还有人在用JAVA写客户端 。
框架实现整体很简单,但还是踩了很多坑,大到框架整体应该如何实现,小到设计模式应该如何使用、对外应该暴露什么方法、maven central如何上传等等各种细节问题,综上,这是一篇很青涩的文章 。中途参考了很多大佬的文章思路和美好意见,但还是很不足,欢迎大佬们下场one one指导 。
最后贴一下github链接:
 
https://github.com/LING-0001/DAGTask




推荐阅读