【问题标题】:Cancelling a coroutine internally?在内部取消协程?
【发布时间】:2019-07-10 15:25:54
【问题描述】:

如果条件不满足,我需要退出 kotlin 中的协程。我想避免使用嵌套条件来保持我的代码干净。这就是我所拥有的:

GlobalScope.launch {
    var condition: Boolean = false
    if (!condition) {
        //this does nothing
        this.cancel()
    }
    println("I shouldn't print")
}

【问题讨论】:

  • 只需使用return 语句。
  • 是协程作用域,不是函数
  • 这是一个 lambda。您可以使用 return@launch 从它返回。
  • 看来我需要访问文档。有效! .将其发布为答案

标签: kotlin coroutine


【解决方案1】:

你有两种方法:

  1. 只需使用return@launch 语句从您的协程主体返回。
  2. this.cancel() 一样抛出 CancellationException

你的代码没有停止工作的原因是因为Cancellation is cooperative在协程中,你的代码应该配合检查isActive或调用yield(),(就像docs所说的那样)来实现你想要的这样一个功能

【讨论】:

    猜你喜欢
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多