我没有看到一种处理异步结果异常的明显方法。例如,如果我想重试异步操作。我会期望像这样的事情,但是handleAsync并没有按照您认为的那样做-异步地在另一个线程上运行回调。在这里返回CompletionStage是不正确的。当天的危害问题:thenApply
就是thenCompose
因为exceptionally
是为了什么?
CompletionStage<String> cf = askPong("cause error").handleAsync((x, t) -> {
if (t != null) {
return askPong("Ping");
} else {
return x;
}
});
AskPong在哪里问演员:
public CompletionStage<String> askPong(String message){
Future sFuture = ask(actorRef, message, 1000);
final CompletionStage<String> cs = toJava(sFuture);
return cs;
}
在试图找出用Java 8完成Scala的restoreWith的正确方法后,我大失所望,最后我还是自己写了。我仍然不知道这是否是最好的方法,但是我创建了以下内容:
public RecoveryChainAsync<T> recoverWith(Function<Throwable,
CompletableFuture<T>> fn);
通过重复调用recoverWith,我将恢复链中的功能排入队列,并使用“ handle”自己实现恢复流程。然后,RecoveryChainAsync.getCompletableFuture()返回整个链的代表性CompletableFuture。希望这可以帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句