我意識到我希望API的使用者不必處理異常。或者更清楚地說,我想確保總是記錄異常,但只有消費者纔會知道如何處理成功。我希望客戶能夠處理異常,如果他們想要的話,我可以返回給他們沒有有效的File
。CompletableFuture的分離異常處理
注:FileDownload
是Supplier<File>
@Override
public CompletableFuture<File> processDownload(final FileDownload fileDownload) {
Objects.requireNonNull(fileDownload);
fileDownload.setDirectory(getTmpDirectoryPath());
CompletableFuture<File> future = CompletableFuture.supplyAsync(fileDownload, executorService);
future... throwable -> {
if (throwable != null) {
logError(throwable);
}
...
return null; // client won't receive file.
});
return future;
}
我真的不明白的東西CompletionStage
。我是否使用exception
或handle
?我是否會回報原來的未來或他們回報的未來?
如果拋出異常,您希望未來的結果如何?消費者是否仍然會受到例外,還是希望他們對發生的事情一無所知? – Jeffrey
@Jeffrey我希望他們能夠接受例外,如果他們願意,也可以自己處理。我不指望他們收到文件 – xenoterracide