挂起函数会挂起协程吗?

saj*_*ehi 2 android suspend coroutine kotlin kotlin-coroutines

其实我很困惑。例如,我知道 suspendCoroutine 函数是一个挂起协程的挂起函数。但是所有的挂起函数都会挂起协程吗?此外,我知道当协程挂起时,它会从相应的线程中删除一段时间,其他协程或任务可以恢复并在该线程上运行。

我想得出的结论是,如果所有的挂起函数都不挂起协程,那么协程中的 put 挂起函数和协程中的非挂起函数有什么区别?

Ten*_*r04 9

标记一个函数suspend使其能够挂起协程,但只有在内部调用另一个挂起协程的挂起函数时,它才会真正挂起该协程。直接挂起协程的挂起函数位于标准库中。其中包括suspendCoroutine()suspendCancellableCoroutine()。您不会经常使用这些。它们最常用于将非协程 API 转换为挂起函数。

间接挂起协程的一些常用函数包括withContext()delay()Job.join()Deferred.await()