9
4

3 に答える 3

15

これはあなたが探しているものですか?

askPong("cause error")
        .handle( (pong, ex) -> ex == null 
                ? CompletableFuture.completedFuture(pong) 
                : askPong("Ping")
        ).thenCompose(x -> x);

また、...Async提供された関数の本体を非同期で実行する予定がない限り、メソッドを使用しないでください。だからあなたが何かをするとき

.handleAsync((x, t) -> {
    if (t != null) {
        return askPong("Ping");
    } else {
        return x;
    })

if-then-elseを別のスレッドで実行するように求めています。askPongを返すのでCompletableFuture、おそらく非同期で実行する理由はありません。

于 2015-02-22T06:33:55.220 に答える
0

Java 8 で Scala の recoverWith を実行する適切な方法を見つけようとして多くのフラストレーションを感じた後、私は自分で作成することになりました。これが最善のアプローチかどうかはまだわかりませんが、次のようなものを作成しました。

public RecoveryChainAsync<T> recoverWith(Function<Throwable,
                                         CompletableFuture<T>> fn);

recoverWith を繰り返し呼び出して、リカバリ チェーン内の関数をキューに入れ、「ハンドル」を使用して自分でリカバリ フローを実装します。RecoveryChainAsync.getCompletableFuture() は、チェーン全体の代表的な CompletableFuture を返します。お役に立てれば。

于 2015-09-14T14:32:09.137 に答える