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

news/2024/11/15 0:38:24/

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

 

import kotlinx.coroutines.*fun main() {runBlocking {val coroutineScope = CoroutineScope(Dispatchers.IO)val job = coroutineScope.launch {var i = 0while (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 = 0while (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 = 0while (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.ppmy.cn/news/1527881.html

相关文章

利士策分享,赚钱与体重:一场关于生活平衡的微妙探索

利士策分享&#xff0c;赚钱与体重&#xff1a;一场关于生活平衡的微妙探索 在当今社会&#xff0c;赚钱与体重&#xff0c;这两个看似风马牛不相及的概念&#xff0c; 却在无形中交织着人们的生活轨迹。 它们不仅仅是数字上的增减&#xff0c;更是个人选择、生活方式乃至心理…

docker容器中的内存占用高的问题分析

文章目录 问题描述原因分析分析1分析2验证猜想 结论和经验 问题描述 运维新增对某服务的监控后发现&#xff1a;内存不断上涨的现象。进一步确认&#xff0c;是因为有多个导出日志操作导致的内存上涨问题。 进一步的测试得出的结果是&#xff1a;容器刚启动是占用内存约为50M…

智能负载均衡:分布式缓存的高效能解决方案

在当今快速发展的互联网时代&#xff0c;分布式缓存成为了提升网站性能和用户体验的关键技术。本文将深入探讨负载均衡算法在分布式缓存中的应用&#xff0c;分析各种算法的优缺点&#xff0c;并提供选择最佳算法的指导。通过实际案例&#xff0c;我们将展示如何通过智能的负载…

用Kimi输出流程图

1.输入 我希望设计一个ERP系统&#xff0c;请帮我简单列一个流程图&#xff0c;用mermaid输出2.输出

MySQL高级功能-窗口函数

背景 最近遇到需求&#xff0c;需要对数据进行分组排序并获取每组数据的前三名。 一般涉及到分组&#xff0c;第一时间就是想到使用group by对数据进行分组&#xff0c;但这样分组&#xff0c;到最后其实只能获取到每组数据中的一条记录。 在需要获取每组里面的多条记录的时候…

【笔记】枚举

文章目录 枚举的概念枚举步骤例题&#xff1a;百鸡百钱方案1方案二方案三 例题 枚举的概念 枚举&#xff1a;逐个尝试所有可能的方案。 先把问题划分成一系列离散的状态&#xff0c;然后遍历这些状态来求解问题。 比如求3x5y10的正整数解有多少&#xff0c;把x∈[0&#xff…

傅里叶变换的基本性质和有关定理

一、傅里叶变换的基本性质 1.1 线性性质 若 则 其中:a,b是常数 函数线性组合的傅里叶变换等于歌函数傅里叶变换的相应组合。 1.2 对称性 若 则 关于傅里叶变换的对称性还有 虚、实、奇、偶函数的傅里叶变换性质: 1.3 迭次傅里叶变换 对f(x,y)连续两次做二维傅里叶变换…

【笔记篇】Davinci Configurator TcpIp模块

目录 1 简介1.1 架构概览2 功能描述2.1 特性2.2 TCP/IP协议栈2.2.1 IPv62.2.2 IPv42.3 初始化2.3 状态机2.4 主函数2.5 故障处理3 集成3.1 静态文件3.2 动态文件4 API描述5 配置5.1 Socket 拥有者配置5.1.1 `<Up>_CopyTxData` callback5.2 单播地址分配方法5.2.1 IPv4 单…