如何从另一个类(在Kotlin中)退出runBlocking协程?

如何从另一个类(在Kotlin中)退出runBlocking协程?,kotlin,exit,kotlin-coroutines,Kotlin,Exit,Kotlin Coroutines,我试图让我的代码在发生某些事情时退出程序,例如用户退出命令。 这就是我运行程序的方式: fun main()=运行阻塞{ Bot().start() } 不幸的是,在start()之外调用时,运行exitProcess(0)或Thread.currentThread().interrupt()似乎没有任何作用,这在我的用例中是非常不寻常的 有什么办法可以解决这个问题吗?runBlocking{ val job=launch{start()} //在此处通过其他API处理输入。完成后: 作业。取

我试图让我的代码在发生某些事情时退出程序,例如用户退出命令。 这就是我运行程序的方式:

fun main()=运行阻塞{
Bot().start()
}
不幸的是,在
start()
之外调用时,运行
exitProcess(0)
Thread.currentThread().interrupt()
似乎没有任何作用,这在我的用例中是非常不寻常的

有什么办法可以解决这个问题吗?

runBlocking{
val job=launch{start()}
//在此处通过其他API处理输入。完成后:
作业。取消()
}

(您可能希望查看以将
Cmd
对象交付到命令循环中,并在输入完成时关闭通道。)

什么是
start()
外观?不幸的是,这似乎不起作用。我知道cancel()将导致start()中的下一个暂停点抛出CancellationException。如果start()已完成或卡在阻塞IO中,则cancel()将不会执行任何操作。
start()
没有任何挂起点,它将完成,因为它是一个启动序列。使用
delay(largeNumber)
或某个无限while循环可以解决这个问题吗?我需要在从另一个进程取消作业后调用
exitProcess(0)
,谢谢