在我的程序的几个点上,我使用launch
来启动执行某些后台任务的协同程序。然后,在某些时候,我从main
函数返回。我的程序的简化版本可能如下所示:
fun main(args : Array<String>)
{
launch {
delay(10000) // some long running operation
println("finished")
}
}
现在,协程按预期启动并开始运行 - 然后程序退出。如果我不从main
返回或将launch
替换为thread
,则一切都按预期工作。 所以我怎么能,因为我没有跟踪我的程序中启动的所有协同程序(因此我无法使用.join()
或.await()
),确保在程序退出之前所有协同程序都完成了吗?
答案 0 :(得分:3)
那么我怎么能,因为我没有跟踪我的程序中启动的所有协同程序(因此我不能使用.join()或.await()),请确保所有协同程序在我的程序之前完成退出?
您需要在某个时刻跟踪并等待结果,以便确定这些协程已经完成。那是因为“协同程序就像守护程序线程”:
Active coroutines do not keep the process alive. They are like daemon threads.
默认情况下non-daemon的常规Java Thread
不是这种情况。