我有两个进程应该并行启动,如果第一个进程失败,我应该使用第二个进程结果.我想出了以下代码.有没有什么明智的方法来简化它?
final CompletableFuture<Data> mainFut = mainProcess(...);
final CompletableFuture<Data> backupFut = backupProcess(...);
final CompletableFuture<Data> resultFut = new CompletableFuture<>();
mainFut.handle((r, t) -> {
if (t == null) {
resultFut.complete(r); // main process is fine, use its result
} else {
LOGGER.error("Main process failed, using backup", t);
backupFut.handle((rb, tb) -> {
if (tb == null) {
resultFut.complete(rb); //backup is fine, use its result
} else {
resultFut.completeExceptionally(tb); //backup failed too
}
return null;
});
}
return null;
});
return resultFut;