首页 > 解决方案 > 如何在 Java 中使用 Kotlin Deferred (Coroutine) 对象?

问题描述

我有一些 Java 代码在某些时候需要暂停并等待结果。我正在尝试使用 Kotlin Coroutines 解决这个问题。

BuilderKt 的异步方法允许我成功地将工作传递到后台。但我不清楚如何进行非阻塞等待结果。

这是我设置工作的方式(并获得延期):

Deferred<T> deferred = BuildersKt.async(GlobalScope.INSTANCE, Dispatchers.getIO(), CoroutineStart.DEFAULT, new Function2<CoroutineScope, Continuation<? super T>, T>() {
    @Override
    public T invoke(CoroutineScope coroutineScope, Continuation<? super T> continuation) {
        return /* Do some work and return a T */;
    }
});

我遇到问题的部分是等待需要继续并且什么也不返回

deferred.await(new Continuation<T>() {
    @NotNull
    @Override
    public CoroutineContext getContext() {
        return ???;
    }

    @Override
    public void resumeWith(@NotNull Object o) {
        ???
    }

});

如果我不能让它做一个非阻塞等待,我需要继续轮询以检查它是否完整,这显然不是正确的方法。我错过了这个难题的哪些部分?

Kotlin 文档没有关于如何将它与 Java 一起使用的示例,并且没有用于后续方法的有用 javadoc

标签: javaandroidkotlinkotlin-coroutines

解决方案


推荐阅读