🌹状态流程
# 状态任务流程
何为状态任务流程? 其实很好理解,比如说有 A、B、C、D 四个任务。D任务的执行依赖A、B、C三个任务, 但是A B C 的执行状态有不好确定(运行时状态)
如果想根据任务返回值的状态决定流程如何执行怎么办呢? 比如说A B C三个任务中根据不通的业务逻辑会返回不通的任务状态。遇到这种情况可以使用Gobrs-Async
为你提供的动态状态能力选择任务执行。
比如: A 业务返回true 则就执行D任务,无需关心B、C任务的执行过程。
与开发一个普通任务不通的是,返回结果需要是 AnyConditionResult
类型。
package com.gobrs.async.test.task.condition;
import com.gobrs.async.core.TaskSupport;
import com.gobrs.async.core.anno.Task;
import com.gobrs.async.core.common.domain.AnyConditionResult;
import com.gobrs.async.core.task.AsyncTask;
import org.springframework.stereotype.Component;
/**
* The type A service.
*
* @program: gobrs -async-starter
* @ClassName AService
* @description: 任务依赖类型
* AServiceCondition,BServiceCondition,CServiceCondition->DServiceCondition:anyCondition
* <p>
* 简化配置
* <p>
* A,B,C->D:anyCondition
* <p>
* D根据 A,B,C 返回的任务结果中的 AnyCondition 的state状态 进行判断是否继续执行 子任务。
* @author: sizegang
* @create: 2022 -03-20
*/
@Task(failSubExec = true)
public class AServiceCondition extends AsyncTask {
/**
* The .
*/
int sums = 10000;
@Override
public AnyConditionResult<String> task(Object o, TaskSupport support) {
AnyConditionResult.Builder<String> builder = AnyConditionResult.builder();
try {
System.out.println("AServiceCondition Begin");
Thread.sleep(300);
for (int i1 = 0; i1 < sums; i1++) {
i1 += i1;
}
System.out.println("AServiceCondition Finish");
} catch (InterruptedException e) {
e.printStackTrace();
// 异常返回false
return builder.setState(false).build();
}
return builder.setState(true).build();
}
}
AnyConditionResult.Builder<String> builder = AnyConditionResult.builder();
构造函数默认创建一个 true
的状态。
# 单测用例
# 运行结果
2022-12-09 17:48:44.676 INFO 58639 --- [ main] com.gobrs.async.core.GobrsPrint : Gobrs-Async Load Successful
CServiceCondition Begin
BServiceCondition Begin
AServiceCondition Begin
BServiceCondition Finish
AServiceCondition Finish
DServiceCondition Begin
DServiceCondition Finish
2022-12-09 17:48:45.435 INFO 58639 --- [pool-1-thread-1] com.gobrs.async.core.TaskLoader : 【ProcessTrace】Total cost: 334ms | traceId = 11770483512420224 | 【task】BServiceCondition cost :3ms【state】:success; ->【task】AServiceCondition cost :305ms【state】:success; ->【task】DServiceCondition:anyCondition cost :0ms【state】:success;
377
【gobrs-async】 testCondition 执行完成
- name: 技术小屋
desc: 大道至简,知易行难
avatar: https://cdn.jsdelivr.net/gh/xugaoyi/image_store/blog/20200122153807.jpg # 可选
link: https://docs.sizegang.cn/ # 可选
bgColor: '#CBEAFA' # 可选,默认var(--bodyBg)。颜色值有#号时请添加单引号
textColor: '#6854A1' # 可选,默认var(--textColor)
- name: 架构师必经之路
desc: '精品学习资源'
avatar: https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/avatar/avatar.png
link: https://learn.sizegang.cn
bgColor: '#718971'
textColor: '#fff'
- name: 平凡的你我
desc: 快乐购物,享受生活
avatar: https://reinness.com/avatar.png
link: https://m.jd.com
bgColor: '#FCDBA0'
textColor: '#A05F2C'
Last Updated: 12/11/2022, 4:38:43 PM