簡體   English   中英

協程組合作業未完成

[英]Coroutine combined Job is not completed

從啟動獲得工作時,工作正確完成

fun testCoroutineScope() = runBlocking {
    val scope = CoroutineScope(Dispatchers.Default)
    val job = scope.launch {
        delay(200)
        println("Job done")
    }
    delay(500)
    println(job.isCompleted)
}

Output:

Job done
true

但是,當您合並自己的工作時,情況並非如此。

fun testCoroutineScope() = runBlocking {
        var job = Job()
        val scope = CoroutineScope(Dispatchers.Default + job)
        scope.launch {
            delay(200)
            println("Job done")
        }
        delay(500)
        println(job.isCompleted)
}

Output:

Job done
false

看起來這項工作永遠不會完成。 這是為什么?

scope.launch創建一個新作業。 當您執行Dispatchers.Default + job時,您不會將您的工作傳遞給 scope。 您正在創建一個新的CoroutineContext ,它結合了jobDispatchers.Default的元素。 文字作業 object 本身不會傳遞給新上下文。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM