🍅普通任务
# 如何开发一个异步任务
小提示
看到这里,小伙伴们是不是已经迫不及待的想真正的体验一下 Gobrs-Async
是怎样开发一个异步任务的。 那么下面由我带领大家来感受一下 一个完整的
AsyncTask
需要怎么开发。
# 普通任务
- 创建 Bean 继承 AsyncTask
- 标记 @Task 注解
# 任务标识
如果你想对 任务进行全局拦截 此时就需要对每一个任务加一个特殊的标识,这样在做全局拦截的时候,就可以区分不同的任务,从而执行不同的逻辑。或者进行不同的日志打印
MQ、链路监控等等。 那么 Gobrs-Async 为你提供了支持。 只需要在 任务 Bean
中加上注解, 则会告知框架此 任务的名称
即 全局任务拦截 ,其中 注解中的 name 值对应的就是全局拦截器中参数中的 taskName
@Task(name = "itemTask")
这里 AsyncTask<T, V> 是一个泛型接口
- T 代表 任务的参数类型
- V 代表 任务的返回类型
如下:
/**
* @program: gobrs-async
* @ClassName TaskBean
* @description: 异步任务 任务参数 Object类型 ; 任务返回 Object类型
**/
@Task
public class BService extends AsyncTask<Object, Object> {
@Override
public void prepare(Object o) {
// 任务开始之前的操作 即task 之前
}
@Override
public Object task(Object o, TaskSupport support) {
String result = getResult(support, AService.class);
System.out.println("拿到的结果" + result);
System.out.println("执行BService");
return null;
}
// 什么条件下触发 task执行
@Override
public boolean nessary(Object o, TaskSupport support) {
return true;
}
// task执行成功回调用
@Override
public void onSuccess(TaskSupport support) {
}
// task 执行失败 回调
@Override
public void onFail(TaskSupport support) {
}
}
# 核心任务执行
核心任务为使用者最为关注的功能方法,需要开发RPC、HTTP、IO 等消耗系统资源的业务逻辑。
@Override
public Object task(Object o, TaskSupport support) {
// todo 业务逻辑
return null;
}
# 获取依赖的任务结果
Gobrs-Async 提供了 getResult
方法,无需用户关注如何获取到的依赖结果,只需要按照使用方式便可轻松获取所需结果值
@Override
public Object task(Object o, TaskSupport support) {
// 拿到 AService (任务bean) 返回的结果, 结果类型为String类型
String result = getResult(support, AService.class, String.class);
return null;
}
getResult
有三个参数
- TaskSupport : Gobrs-Async 所需要的核心参数,通过
task
方法中的参数透穿即可 - Class: 所依赖的 Bean的 Java 类型
- Class: 返回结果的类型
# 任务是否执行
Gobrs-Async 会根据 nessary
的返回结果,判断当前task
是否需要执行 如果返回true
则需要被执行,否则返之。
例如: 当参数为 cancel
时, 任务不执行。
@Override
public boolean nessary(String params, TaskSupport support) {
// 假如参数是cancel 则不执行当前任务
if("cancel".equals(params)){
return false;
}
return true;
}
# 任务成功回调
如果你想在任务执行完成后做一些额外的操作。例如打印日志、发送邮件、发送MQ、记录信息等。 Gobrs-Async 同样也为你考虑到了。通过实现 callback 方法。会让你轻松的拿到 任务的执行结果。
@Override
public void onSuccess(TaskSupport support) {
// todo 任务成功逻辑
}
# 任务失败回调
在任务异常时发送告警信息
@Override
public void onFail(TaskSupport support) {
// todo 任务执行失败回调逻辑
}
Last Updated: 11/4/2022, 3:19:44 PM