我有一个返回Future
实例的 Java API。我需要将其转换为Uni
. 从 mutiny 文档中,我看到可以将 a 转换CompletionStage
为Uni
,但我找不到如何将标准转换Future
为Uni
.
问:如何转换java.util.concurrent.Future
为Uni
?
我知道我可以扭曲它的get()
调用Uni
,但它会阻塞,不是吗?
我有一个返回Future
实例的 Java API。我需要将其转换为Uni
. 从 mutiny 文档中,我看到可以将 a 转换CompletionStage
为Uni
,但我找不到如何将标准转换Future
为Uni
.
问:如何转换java.util.concurrent.Future
为Uni
?
我知道我可以扭曲它的get()
调用Uni
,但它会阻塞,不是吗?
问题Future
在于它是一个阻塞 API,并且与 不同的CompletionStage
是,没有办法链接操作流。
但是,Mutiny 有一种方法来处理阻塞 API:
Future future = ...;
Uni<Object> uni = Uni.createFrom()
.item( () -> future.get() )
.runSubscriptionOn( Infrastructure.getDefaultWorkerPool() );
更新:
我的答案适用于所有阻塞代码,但正确答案在评论中:
Uni.createFrom().future(future);
或者
Uni.createFrom().future(() -> future))