提问人:MXC 提问时间:1/22/2022 最后编辑:MXC 更新时间:1/24/2022 访问量:695
从 Java 调用时,Kotlin 挂起函数在延迟后不执行
Kotlin suspend function not executing after delay when called from Java
问:
我正在尝试从我的 Java 类中调用这个 Kotlin 挂起代码。该解决方案基于此处提到的内容。https://stackoverflow.com/a/52887677/5140533
Kotlin 代码:
Main.kt
suspend fun doWorld() = coroutineScope {
launch {
println("Thread name2 ${Thread.currentThread().name}")
delay(2000L)
println("Hello world")
}
}
@OptIn(DelicateCoroutinesApi::class)
fun doSomethingAsync() =
GlobalScope.future { doWorld() }
Converter.java
public class Converter {
public static void main(String[] args) {
MainKt.doSomethingAsync();
}
}
当我从 Java 类调用时,我看不到任何 print 语句。有人可以解释一下到底发生了什么以及我如何纠正这一点吗?doSomethingAsync()
答:
1赞
Sergio
1/23/2022
#1
我认为在您的情况下,程序在新的协程开始之前完成。调用后尝试延迟函数中的电流:Main Thread
main
MainKt.doSomethingAsync()
public class Converter {
public static void main(String[] args) {
MainKt.doSomethingAsync();
try {
TimeUnit.MILLISECONDS.sleep(2500);
} catch (InterruptedException e) {
e.printStackTrace();
}
// Or use MainKt.doSomethingAsync().get()
}
}
然后我想日志将显示出来。
评论
2赞
Sam
1/23/2022
因为返回 a ,所以您可以改用 ,它只会等待所需的时间。GlobalScope.future
CompletableFuture
MainKt.doSomethingAsync().get();
0赞
MXC
1/24/2022
@sam 试过了,它奏效了。谢谢!
评论