[英]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.