質問する
3379 次
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 に答える