handle
上任何whenComplete
或CompletableFuture
方法的返回类型还是CompletableFuture
而不是CompletionStage
。
但是,如果您要在所有返回的实例上完成CF,则不会执行handle
的代码。
F.e。:
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()
换句话说,在调用handle
时返回CF非常混乱,您不应该完成它,而应该完成原始CF。
那么他们为什么不返回CompletionStage
呢?那会禁止像我这样的人犯这样的错误?