Kotlin协程学习之-02

协程的基本使用

GlobalScope.launch

生命周期与进程一致,且无法取消

runBlocking

会阻塞线程,一般在测试阶段可以使用

val coroutineScope = CoroutineScope(context)

coroutineScope.launch

通过context参数去管理和控制协程的生命周期

用法

val coroutineScope = CoroutineScope(context)

coroutineScope.launch(Dispatchers.IO) {

通过Dispatchers.IO参数把任务切换到IO线程执行

}

coroutineScope.launch(Dispatchers.Main) {

通过Dispatchers.Main参数把任务切换到Main线程执行

}

使用withContext方法

该方法可以切换到指定线程,并在闭包内的逻辑执行结束后,自动把线程切换回去继续执行

corountineScope.launch(Dispatchers.Main) {

val image = withContext(Dispatchers.IO) {

getImage(imageId)

}

}

使用launch、async等方法创建的协程,在执行到某个suspend方法时会从正在执行它的线程上脱离,互相脱离后的线程和协程会分别执行不同的任务。

使用suspend标记的方法,只能执行在协程代码块中。

获取协程的返回值

协程是一种异步概念,需要一些特殊操作才能获取返回值。方法如下

async / await

主要流程是使用async开启协程,然后调用async返回的Defered对象的await方法获取协程运算的结果。

跟launch相比,async是带返回值的。

相关推荐
一起养小猫1 分钟前
Flutter for OpenHarmony 实战 文件存储与数据库操作完全指南
开发语言·jvm·数据库·spring·flutter·harmonyos
云游云记3 分钟前
php Composer 使用全攻略
开发语言·php·composer
JMchen12311 分钟前
Android音频处理全解析:从3A算法到空间音频,打造专业级音频体验
android·经验分享·算法·kotlin·android studio·音视频
独自破碎E13 分钟前
LCR004-只出现一次的数字II
java·开发语言
剑锋所指,所向披靡!15 分钟前
STL之sting容器
开发语言·c++
Henry Zhu12317 分钟前
Qt Model/View架构详解(六):综合实战项目(下)
开发语言·qt·架构
Liuqz200922 分钟前
Go 安装与配置
开发语言·后端·golang
2301_7657031423 分钟前
动态库热加载技术
开发语言·c++·算法
宇钶宇夕25 分钟前
CoDeSys入门实战一起学习(二十五):梯形图(LD)触点与线圈指令精讲及电机启停案例
运维·学习·自动化·软件工程
Chan1625 分钟前
《Redis设计与实现》| 常用数据类型与AOF、RDB持久化
java·开发语言·redis·spring·面试·java-ee