Как использовать объект Kotlin Deferred (Coroutine) в Java? - PullRequest
0 голосов
/ 16 марта 2020

У меня есть некоторый код Java, который в какой-то момент должен приостановить и дождаться результата. Я пытаюсь решить эту проблему с помощью Kotlin сопрограмм.

Метод BuilderKt asyn c позволяет мне успешно перенести работу в фоновый режим. Но мне неясно, как сделать неблокирующее ожидание результата.

Вот как я настраиваю работу (и получаю Отложенный):

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 */;
    }
});

Часть I У меня проблемы с ожиданием требует продолжения и ничего не возвращает

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

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

});

Если я не могу заставить его сделать неблокирующее ожидание, мне нужно будет продолжить опрос, чтобы проверить, завершено ли это, что является очевидно, не правильный подход. Какие части этой головоломки мне не хватает?

В документации Kotlin нет примеров того, как использовать ее с Java, и нет полезного javado c для методов в продолжение

...