在几个协同程序运行时,不要退出Kotlin程序

时间:2018-01-06 06:40:49

标签: kotlin coroutine kotlinx.coroutines

在我的程序的几个点上,我使用launch来启动执行某些后台任务的协同程序。然后,在某些时候,我从main函数返回。我的程序的简化版本可能如下所示:

fun main(args : Array<String>)
{
    launch {
        delay(10000) // some long running operation
        println("finished")
    }
}

现在,协程按预期启动并开始运行 - 然后程序退出。如果我不从main返回或将launch替换为thread,则一切都按预期工作。 所以我怎么能,因为我没有跟踪我的程序中启动的所有协同程序(因此我无法使用.join().await()),确保在程序退出之前所有协同程序都完成了吗?

1 个答案:

答案 0 :(得分:3)

  

那么我怎么能,因为我没有跟踪我的程序中启动的所有协同程序(因此我不能使用.join()或.await()),请确保所有协同程序在我的程序之前完成退出?

您需要在某个时刻跟踪并等待结果,以便确定这些协程已经完成。那是因为“协同程序就像守护程序线程”:

  

Active coroutines do not keep the process alive. They are like daemon threads.

默认情况下non-daemon的常规Java Thread不是这种情况。