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类型的数组来做

阅读 1.6k
73 声望
1 粉丝
0 条评论
73 声望
1 粉丝
宣传栏