kotlin的协程

62 阅读1分钟

非标准库需要先导包在app的gradle下,基于最新版本

implementation(libs.kotlinx.coroutines.core)
implementation(libs.kotlinx.coroutines.android)

主线程上创建一个协程域即可

例如:GlobalScope.launch、runBlocking都是可以的,后者带有阻塞主线程的能力,可以执行完自己作用域的内容后释放

1、可以在主线程中创建高并发的协程来完成任务,耗时会比子线程小很多

2、也可以在协程的作用域中直接调用launcher函数进行同步执行,对于复杂的逻辑可以使用,coroutineScope嵌套执行,在coroutineScope中也可以调用挂起函数,不会受到影响

3、协程一般项目中使用不会直接创建协程域,而是像是用runnable一样,创建之后进行Launcher,这样的好处是为了更好的回收资源,

    val job = Job()
    val scope = CoroutScope(job)
    scope.launch{ 
    ..执行逻辑}
    scope.cancel

4.协程执行执行的都是void的逻辑,需要返回值的,需要使用async

fun(){
    runBlocking{
        val r = async{
            5+5
        }.await()
        println(r)
    }
}

但不是每一个返回值都要使用await囊括,可以先执行async的逻辑,后面统一使用await接受

5.waitContent,协程作用域的一个带有返回值的作用域,相当于async+await,但是需要指定一个线程参数,如下

Dispatcher.Default/ 默认低并发的线程策略,高并发的情况下可能会影响执行效率

Dispatcher.IO/ 较高并发的执行策略,一般执行网络请求

Dispatcher.Main /这个值不开线程,所以只能在主线程使用