问题由来:
在Vertx项目中,有时抛出一个异常
严重: Unhandled exception
ava.lang.IllegalStateException: Result is already complete: succeeded
at io.vertx.core.impl.FutureImpl.complete(FutureImpl.java:107)
at io.vertx.core.impl.FutureImpl.handle(FutureImpl.java:164)
at io.vertx.core.impl.FutureImpl.handle(FutureImpl.java:23)
at io.vertx.core.impl.FutureImpl.checkCallHandler(FutureImpl.java:188)
at io.vertx.core.impl.FutureImpl.tryComplete(FutureImpl.java:139)
......
顾名思义,是在future执行complete之前已经被complete掉了。
于是,码代码验证一下:
@Test public void voidTest(TestContext context) { Async async = context.async(); Future fut1 = Future.future(); fut1.setHandler(Future.succeededFuture()); vertx.executeBlocking(fut -> { System.out.println("doing some bloking operation"); fut.complete(); }, result -> { System.out.println("success"); fut1.complete(); }); }
异常抛出如下:
doing some bloking operation
success
六月 15, 2017 9:53:24 上午 io.vertx.core.impl.ContextImpl
严重: Unhandled exception
java.lang.IllegalStateException: Result is already complete: succeeded
......
结论:
慎用Future.successedFuture();