其实我很困惑。例如,我知道suspendCoroutine函数,它是挂起协同线的挂起函数。但是,是否所有的暂停功能都暂停协同呢?此外,我知道当一个协同线被挂起时,它会从对应的线程中移除一段时间,其他协同或任务可以在这个线程上恢复并运行。
我想得出这样的结论:如果所有的挂起功能都不挂起协同线,那么在coroutine中放置挂起函数和在coroutine中不挂起函数有什么区别?。
发布于 2022-08-05 17:44:40
标记函数suspend使它能够挂起协同线,但只有在内部调用另一个挂起协同线的挂起函数时,它才会实际挂起协同线。直接挂起协同线的挂起函数在标准库中。其中包括suspendCoroutine()和suspendCancellableCoroutine()。你不会经常使用这些。它们最常用于将非协同性API转换为挂起函数。
间接挂起协同线的一些常用函数是withContext()、delay()、Job.join()和Deferred.await()。
https://stackoverflow.com/questions/73248751
复制相似问题