[英]Kotlin Coroutine Execution Order Same Thread
我遇到了一些使用单线程上下文创建CoroutineScope
的代码
val serialThreadContext = newSingleThreadContext("mysinglethreadcontext")
fun myScope(): CoroutineScope = CoroutineScope(serialThreadContext)
然后在代码库的其他地方,在这个 scope 中启动协程......
myScope().launch {
someOtherMethod()
...
}
据我了解,所有这些创建的协程都将安排在同一个线程上,但我找不到任何关于执行或暂停顺序的具体文档。
这在我的脑海中提出了以下问题:
如果someOtherMethod
不包含任何suspend
函数,这个协程还能被线程挂起吗?
当线程从调度程序中拉出协程时,是否有任何保证的执行顺序?
协程只能在挂起函数处挂起。 一旦调用了someOtherMethod
,如果它不是挂起 function,则无法避免等待 function 返回,然后才能通过挂起释放线程。 请注意,标记为suspend
的 function 仍然并不意味着它一定会暂停调用它的协程。 如果它没有在内部对其他调度程序进行挂起工作,它仍然会占用您的调用线程。
不保证执行顺序。 您不应该依赖单线程调度程序来尝试按顺序排列工作。 有关如何使用 Channel 创建工作队列的示例,请参见我的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.