当前位置: 首页 > article >正文

Kotlin cancel CoroutineScope.launch的任务后仍运行

Kotlin cancel CoroutineScope.launch的任务后仍运行

 

import kotlinx.coroutines.*

fun main() {
    runBlocking {
        val coroutineScope = CoroutineScope(Dispatchers.IO)

        val job = coroutineScope.launch {
            var i = 0
            while (i < Int.MAX_VALUE) {
                i++
                println(i)
            }
        }

        // 2ms 取消协程
        delay(2)
        println("cancel...")
        job.cancel()
        coroutineScope.cancel()
        println("cancel!")
    }
}

 

...

 

997
998
999
cancel!
1000
1001
1002

 

...

加上 coroutineScope.isActive,控制while循环。

import kotlinx.coroutines.*

fun main() {
    runBlocking {
        val coroutineScope = CoroutineScope(Dispatchers.IO)

        val job = coroutineScope.launch {
            var i = 0
            while (i < Int.MAX_VALUE && coroutineScope.isActive) {
                i++
                println(i)
            }
        }

        // 2ms 取消协程
        delay(2)
        println("cancel...")
        job.cancel()
        coroutineScope.cancel()
        println("cancel!")
    }
}

 

...

 

598
599
600
cancel!

Process finished with exit code 0

 

也可以加上:

yield()

控制:

import kotlinx.coroutines.*

fun main() {
    runBlocking {
        val coroutineScope = CoroutineScope(Dispatchers.IO)

        val job = coroutineScope.launch {
            var i = 0
            while (i < Int.MAX_VALUE) {
                yield()

                i++
                println(i)
            }
        }

        // 2ms 取消协程
        delay(2)
        println("cancel...")
        job.cancel()
        coroutineScope.cancel()
        println("cancel!")
    }
}

...

 

108
109
110
cancel!

 

 

 

 

b2fd91bb8f6d48669f9a9b45ef3de131.png

 

 

 

 

kotlin协程Job、CoroutineScope作用域,Android_kotlinx.coroutines.job-CSDN博客文章浏览阅读555次。一般编程的技法,比如,在Android中,假设在主线程中实现了一个函数,但该函数是耗时操作,毫无疑问,需要将这个函数的实现切入非主线程中操作,那么可以设计一种托管的函数,在托管的函数里面干脏活,处理完成后,把结果抛到主线程。结果1-a: 5 - tid:22。一般编程的技法,比如,在Android中,假设在主线程中实现了一个函数,但该函数是耗时操作,毫无疑问,需要将这个函数的实现切入非主线程中操作,那么可以设计一种托管的函数,在托管的函数里面干脏活,处理完成后,把结果抛到主线程。_kotlinx.coroutines.jobhttps://zhangphil.blog.csdn.net/article/details/131096325

 


http://www.kler.cn/a/311153.html

相关文章:

  • 【循环神经网络】
  • 【Xrdp联机Ubuntu20.04实用知识点补充】
  • Vue自定义指令详解——以若依框架中封装指令为例分析
  • 鸿蒙next版开发:ArkTS组件通用属性(Z序控制)
  • 云计算:定义、类型及对企业的影响
  • 《重学Java设计模式》之 原型模式
  • PDF标准详解(五)——图形状态
  • 104. 二叉树的最大深度【 力扣(LeetCode) 】
  • VIM使用技巧
  • 从openAI最新模型GPT-o1再谈思维链(Cot)技术,大模型该怎么提升其逻辑推理能力?
  • 在 pika.SelectConnection 和 gevent 中实现高效异步:事件驱动与协程模型的冲突与优化
  • linux入门到实操-2 linux桌面、终端基本操作,文件系统、目录结构、挂载点
  • [数据集][目标检测]车窗状态检测车窗开关检测数据集VOC+YOLO格式299张3类别
  • CSS入门笔记
  • 【AI大模型-提示词的技巧】
  • python解析ip范围,拆分为所有ip数组
  • Qt快捷键说明与用法
  • 在Docker容器中执行命令
  • 数据湖-方案对比
  • ceph之osd扩容和缩容
  • 一个有个性的使用工具thefuck@Ubuntu
  • Java-list集合转成前端需要的json格式
  • 物理设计-理解与应用数据库范式于物理设计
  • 新能源汽车 BMS 学习笔记篇——N-MOS P-MOS 的开关原理及选型要点
  • redis基本数据结构-set
  • 与Linux的初见