DSAppTeam / Anchors

:white_check_mark: Anchors 是一个基于图结构,支持同异步依赖任务初始化 Android 启动框架。其锚点提供 "勾住" 依赖的功能,能灵活解决初始化过程中复杂的同步问题。参考 alpha 并改进其部分细节, 更贴合 Android 启动的场景, 同时支持优化依赖初始化流程, 自动选择较优的路径进行初始化。
Apache License 2.0
820 stars 79 forks source link

循环依赖是怎么避免的? #4

Closed forever4313 closed 5 years ago

forever4313 commented 5 years ago

看到有这么一段注释

 * project 的构建内部,避免了回环的发生。
 * 当出现project 内 task 循环依赖是,循环依赖会自动断开。

是怎么做到依赖自动断开的呢? 顺便想问一下, 如果使用如下build构建 builder1.add(TASK_11).dependOn(TASK_10); builder1.add(TASK_12).dependOn(TASK_11); builder1.add(TASK_13).dependOn(TASK_12);

从startTask就只能运行 START->FINISH 两个task

YummyLau commented 5 years ago

针对你的例子,因为你丢失了 TASK_10,所以 project1中 startTask任务结束之后获取 TASK_10,发现task对象不存在则丢弃。 真正检测回环的逻辑在 AnchorsRuntime#getDependenciesMaxDepth, 存在死循环的时候框架会抛出异常,这对程序设计是合理的。

forever4313 commented 5 years ago

哦,明白了,实际上,Add才是真正的在图中增加一个task,dependon只是为了增加对应的依赖关系

YummyLau commented 5 years ago

哦,明白了,实际上,Add才是真正的在图中增加一个task,dependon只是为了增加对应的依赖关系

嗯嗯对的