При создании API рекомендуется кодировать интерфейс, поэтому кажется, что возврат CompletionStage кажется лучшим подходом. Однако я понял, что всегда вызываю .toCompletableFuture после получения CompletionStage. Каков рекомендуемый подход в этом случае?
Должен ли API возвращать CompletionStage или CompletableFuture
Ответы (2)
См. мой ответ на странице https://stackoverflow.com/a/49158702/1113842.
Как и спросил Хольгер, почему вы звоните toCompletableFuture
?
- Вы хотите, чтобы звонящий
complete
/cancel
это? Большинство приложений предоставляют собственные механизмы прохождения этапа. Таким образом, нет необходимости раскрывать эти методы. - Вы хотите использовать блокировку
get
? Этого следует избегать в асинхронном программировании.
Если ответы на оба вопроса отрицательные, следует вернуть CompletionStage
.
person
Xiao
schedule
07.03.2018
API, использующий CompletionStage
, предназначен для неблокирующего использования, поэтому вызов .toCompletableFuture()
требуется только в том случае, если вызывающий объект не работает неблокирующим образом. Если API не является неблокирующим, он должен возвращать простой старый интерфейс Future
.
person
Konstantin Pelepelin
schedule
09.08.2017
См. также вопрос с обратной точки зрения stackoverflow.com/q/34930840/1531945
- person Konstantin Pelepelin; 09.08.2017
toCompletableFuture()
… - person Holger   schedule 26.01.2017CompletionStage
определяет 38 методов, интерфейсFuture
определяет еще пять. Если вам постоянно («всегда») нужны оставшиеся восемь,CompletableFuture
специфических методов, кодирование для интерфейса действительно не для вас. - person Holger   schedule 31.01.2017