DependencyTask 任务依赖框架

DependencyTask 任务依赖框架

背景

在我们的程序中,经常会有序列的操作流程集合,就像工厂的组装流程,先执行任务1,然后任务2,任务n…, 各个任务之间是有依赖关系的,比如,执行任务4之前,任务3和任务2要完成了才行。一个具体的例子,比如,app中的启动过程,一般包含权限检查,用户登录,引擎初始化等一系列的操作,这些操作有些可能有依赖关系,而且这些依赖关系随着需求的变化也可能发生变化,这里我们就可以使用下面介绍的 DepengdencyTask 任务依赖框架

这个一个用Kotlin编写的基于协程并发的轻巧框架

框架特征

  • 框架可以检查任务的循环依赖
  • 没有依赖关系的任务可以并发地执行(可以指定任务执行的Disaptacher)
  • 同一个任务执行器被调用多次,不会多次执行;只会从上一次执行失败的任务开始继续执行
  • 如果任务执行器在运行期间,会检查状态,正在运行时,不会再执行任务。

引用

maven

<repositories>
  <repository>
    <id>jitpack.io</id>
    <url>https://jitpack.io</url>
  </repository>
</repositories>
<dependency>
  <groupId>com.github.Arrowyi</groupId>
  <artifactId>DependencyTask</artifactId>
  <version>TheVersion</version>
</dependency>

gradle

allprojects {
  repositories {
    ...
    maven { url 'https://jitpack.io' }
  }
}
dependencies {
  implementation 'com.github.Arrowyi:DependencyTask:TheVersion'
}

用法介绍

  • 先把自己的流程梳理清楚,分成若干任务 (可以有依赖)
  • 继承Task类,编写自己的任务类
  • 实现任务类的action方法。action方法为suspend 方法,可以任意的coroutine中运行,注意:无论action方法的结果如果,都需要调用actionRersult方法通知框架任务处理结束
  • 创建TaskProcessor执行器,调用start方法获取一个Flow
  • 调用Flowcollect方法开始执行操作流程,colloct方法收集执行过程中的状态

Flow 的状态类

//check if there is circular dependency , true is for check ok (no circular dependency), false will end the processor, and the tasks is all
//the tasks this processor will do.
class Check(val result: Boolean, val tasks: List<Task>?) : 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值