不可取消的协程被取消
创始人
2024-12-26 05:30:27
0

在协程被取消时,如果它被标记为不可取消,将会引发CancellationException异常。这可以通过使用withContext函数和NonCancellable上下文来解决。

以下是一个包含代码示例的解决方法:

import kotlinx.coroutines.*

fun main() = runBlocking {
    val job = launch {
        try {
            withContext(NonCancellable) {
                repeat(1000) { i ->
                    println("Job: I'm sleeping $i ...")
                    delay(500L)
                }
            }
        } catch (e: CancellationException) {
            println("Job: I'm cancelled, but not throwing CancellationException")
        }
    }

    delay(1300L) // 等待一段时间
    println("Main: I'm tired of waiting!")
    job.cancelAndJoin() // 取消协程并等待它结束
    println("Main: Now I can quit.")
}

在上面的示例中,withContext(NonCancellable)函数将协程的执行上下文设置为不可取消的上下文。因此,即使协程被取消,它也不会引发CancellationException异常。相反,它将捕获并处理CancellationException异常,并在catch块中打印消息。

运行上述代码,你会看到输出类似于以下内容:

Job: I'm sleeping 0 ...
Job: I'm sleeping 1 ...
Job: I'm sleeping 2 ...
Main: I'm tired of waiting!
Job: I'm cancelled, but not throwing CancellationException
Main: Now I can quit.

如你所见,尽管协程被取消,但它不会抛出CancellationException异常。

相关内容

热门资讯

黑科技科技(wepoke智能a... 黑科技科技(wepoke智能ai)wepower使用说明书(wepOkE)素来是真的有挂(确实有挂)...
黑科技模拟器(wepoke智能... WePoker透视辅助工具核心要点解析‌,黑科技模拟器(wepoke智能ai)wepoke是机器发牌...
黑科技脚本(wepokeai代... 您好,这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩家在这款游戏中打牌都...
黑科技辅助挂(wepoke真的... 黑科技辅助挂(wepoke真的有挂)wepoke 软件(wEPOKE)固有真的有挂(有挂猫腻)-哔哩...
黑科技辅助挂(wepoke黑科... 黑科技辅助挂(wepoke黑科技)wepoke软件透明挂演示(wEpOke)一直真的有挂(真的有挂)...
黑科技app(wepoke真的... 此外,数据分析德州()辅助神器app还具备辅助透视行为开挂功能,通过对客户透明挂的深入研究,你可以了...
黑科技智能ai(wepoke辅... 黑科技智能ai(wepoke辅助插件)wepoke软件透明(WEPOke)先前是有挂(果真有挂)-哔...
黑科技模拟器(wepoke透明... 黑科技模拟器(wepoke透明黑科技)wepoke德州扑克用ai代打(WEPOKE)最初存在有挂(有...
黑科技插件(wepoke辅助插... 黑科技插件(wepoke辅助插件)wepoke软件透明(WEPOke)从来是真的有挂(有挂解惑)-哔...
黑科技美元局(wepoke智能... 黑科技美元局(wepoke智能ai)wepoke辅助真的假的(wepoKE)原先真的有挂(竟然有挂)...