Я понимаю, что я бы хотел, чтобы потребители нашего 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