vertx 学习之Future

一、并发组合执行。CompositeFuture.all 接受多个future参数(最多6个);当所有的future都成功了,就返回成功的future,否则只要有一个失败就会返回失败(failed)的future:


			Future<JsonObject> fut1 = Future.future();
			Future<JsonObject> fut2 = Future.future();
			Future<JsonObject> fut3 = Future.future();
			Future<JsonObject> fut4 = Future.future();
			Future<JsonObject> fut5 = Future.future();
			Future<JsonObject> fut6 = Future.future();
            //阻塞代码以及在阻塞代码执行返回异步结果处理程序来完成的,开启一个线程异步执行
			vertx.executeBlocking(fut -> {
                 //内容
                fut1.complete(new JsonObject());
				fut.complete();
			}, false, null);
			vertx.executeBlocking(fut -> {
		        //内容
                fut2.complete(new JsonObject());
				fut.complete();
			}, false, null);
			vertx.executeBlocking(fut -> {
				//内容
                fut3.complete(new JsonObject());
			    fut.complete();
			}, false, null);
           vertx.executeBlocking(fut -> {
        	  //内容
               fut4.complete(new JsonObject());
        	   fut.complete();
           }, false, null);
           vertx.executeBlocking(fut -> {
        	   //内容
            fut5.complete(new JsonObject());
		    fut.complete();
			}, false, null);
           vertx.executeBlocking(fut -> {
                //内容
               fut6.complete(new JsonObject());
   		    fut.complete();
			}, false, null);
            //等所有的都结束后,合并在一起统一输出
			CompositeFuture.all(fut1,fut2,fut3,fut4,fut5,fut6).setHandler(ar -> {
				  if (ar.succeeded()) {
					  JsonObject r0 = ar.result().resultAt(0);
					  JsonObject r1 = ar.result().resultAt(1);
					  JsonObject r2 = ar.result().resultAt(2);
					  JsonObject r3 = ar.result().resultAt(3);
					  JsonObject r4 = ar.result().resultAt(4);
					  JsonObject r5 = ar.result().resultAt(5);
					 future.complete(r0.mergeIn(r1.mergeIn(r2.mergeIn(r3.mergeIn(r4.mergeIn(r5))))));
				  }else{
					 future.complete(new JsonObject());
				  }
			});
		

二、顺序组合执行。 compose 可以使用链的方式设置组合future(因此这种方式叫顺序组合)。

在这个的例子中,这3个操作都是链式的:

fut1   fut2     startFuture 

当这3个步骤都成功了,最终的future (startFuture)就成功了。然而,如果其中的一个步骤失败了,最终的future并也是失败的。

 

FileSystem fs = vertx.fileSystem();
Future<Void> startFuture = Future.future();
 
Future<Void fut1 = Future.future();
fs.createFile("/foo", fut1.completer());

fut1.compose(v -> {
   // What the file is created (fut1), execute this:
   Future<Void> fut2 = Future.future();
   fs.writeFile("/foo", Buffer.buffer(), fut2.complter());
   return fut2;
}).compose(v -> {
    // When the file is written (fut2), execute this:
    fs.remove("/foo", "/bar", startFuture.completer());
}, 
// mark startFuture it as failed if any step fails.
startFuture);

https://blog.csdn.net/u011054333/article/details/76595444//vertx中http的讲解,webclient的使用

点击打开链接

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值