Почему методы CompletableFuture не возвращают CompletionState
Тип возврата любого из handle
или же whenComplete
методы на CompletableFuture
опять CompletableFuture
вместо CompletionStage
,
Однако, если вы завершите CF в любом из этих возвращенных экземпляров, код handle
не выполняется.
Fe:
val handled = AtomicBoolean(false)
val cf = CompletableFuture<Unit>().whenComplete { _, _ -> handled.set(true) }
cf.complete(Unit)
handled.get().shouldBeTrue()
В приведенном выше коде я ожидаю, что дескриптор будет выполнен. Однако это не так. Вы можете завершить оригинальный CF, и тогда он работает:
val handled = AtomicBoolean(false)
val cf = CompletableFuture<Unit>()
cf.whenComplete { _, _ -> handled.set(true) }
cf.complete(Unit)
handled.get().shouldBeTrue()
Другими словами, возвращая CF при звонке handle
это довольно запутанно, потому что вы не должны завершать его, а вместо этого завершать исходный CF.
Так почему бы им не вернуть CompletionStage
вместо этого, что бы запретить таким людям, как я, совершить такую ошибку?