所有挂起函数都有作业吗?

Do all suspend functions have a Job?

suspend 函数中使用 coroutineContext[Job]!! 安全吗?所有挂起函数都有作业吗?

不,并非所有挂起函数都有工作。

coroutineContext 是通过 suspend 调用链透明传递协程相关对象的通用 Kotlin 机制,Jobkotlinx.coroutines 特定抽象。

如果您通过任何支持 Jobkotlinx.coroutines 构建器启动了协程(例如使用 asynclaunchproduce。您可以检查特定的构建器文档以检查它是否支持 Job),然后你的 coroutineContext.

中有 Job

但是如果你以其他方式启动协程,例如使用 stdlib buildSequence,则协程上下文将不包含作业。