2

我有一个返回Future实例的 Java API。我需要将其转换为Uni. 从 mutiny 文档中,我看到可以将 a 转换CompletionStageUni,但我找不到如何将标准转换FutureUni.

问:如何转换java.util.concurrent.FutureUni

我知道我可以扭曲它的get()调用Uni,但它会阻塞,不是吗?

4

1 回答 1

4

问题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))
于 2021-04-28T22:34:28.190 回答