java vertx写出较为简单的便于阅读的顺序串行异步代码
Posted 列车
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java vertx写出较为简单的便于阅读的顺序串行异步代码相关的知识,希望对你有一定的参考价值。
Vertx是一个高性能框架,基于异步驱动设计。
如果要在Vertx 中 做查询数据,发起网络连接,查询文件等异步操作的话,由于java没有C#那样的async / await 等效代码,如果直接写线性异步代码,就会面临回调地狱的现象,因此编写一个较为简单的工具类,让线性异步代码变得便于阅读。
我没用过RxJava,而我有思路,所以是自己编写工具类来解决了。每次在写异步代码的时候,都使用一个无参无返回值的函数式对象包裹,然后使用一个有序集合,将其串起来,通过传入索引来决定下一个异步的步骤。
工具类源码:
public class AsyncProcess {
//线性集合
List<Runnable> funcs=new ArrayList<>();
//是否初始化,用于重复使用,如果不重复使用一个AsyncProcess实例的话,可以不管
private boolean isNotInit=true;
//添加一个Runnable类型的函数
public AsyncProcess add(Runnable func) {
funcs.add(func);
return this;
}
//调用指定索引所对应的函数,用于业务代码执行完成后调用下一个可以包含异步任务的方法
public void to(int index) {
funcs.get(index).run();
}
public boolean isNotInit() {
return isNotInit;
}
//开始,调用第一个函数
public void begin() {
isNotInit=false;
funcs.get(0).run();
}
}
实例代码:
FileSystem fs = vertx.fileSystem();
AsyncProcess ap=new AsyncProcess();
//fs.readFile("")
String path="E:/testFile";
String t1=path+"/3.txt";
String data;
if(ap.isNotInit())
ap.add(()->{
fs.readFile(t1).onSuccess((b)->{
//读取文件成功,调用to方法,执行下一个方法
ap.to(1);
}).onFailure((b)->{
System.out.println("失败:"+b.getMessage());
});
}).add(()->{
System.out.println("成功的第二部");
}).begin();
else ap.begin();
工具类代码考虑比较简单,如果各位有更好的方式,可以提供一下思路。以上方式有一个更简单的方法,就是用Runnable类型的数组来做
以上是关于java vertx写出较为简单的便于阅读的顺序串行异步代码的主要内容,如果未能解决你的问题,请参考以下文章