Почему методы 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 вместо этого, что бы запретить таким людям, как я, совершить такую ​​ошибку?

0 ответов

Другие вопросы по тегам