Kotlin 协程学习笔记(一):Kotlin 协程的概念

学习资料:

B站:动脑学院协程课程

一、Kotlin 线程实现异步与协程实现异步

//************ 使用协程处理异步调用(伪代码) *****************/

/**
 * 被suspend修饰的函数叫做“挂起函数”,表示该函数支持同步化的异步调用。
 *
 * 使用suspendCoroutine<T>函数的返回值类型作为挂起函数bitmap-Suspendable的返回值类型。这个函数
 * 除了确定返回值的类型外,还能帮我们拿到一个Continuation的实例,负责保存和恢复挂起状态。这里说明一下
 * 使用到的几个函数:
 *     resume:将正常的结果返回,它的参数实际上就是bitmapSuspendable的返回值Bitmap.
 *     resumeWithException:将异常返回,它的参数就是bitmapSuspendable调用时会抛出的异常.
 */

@RequiresApi(Build.VERSION_CODES.P)
suspend fun main() {
    try {
        val bitmap = bitmapSuspendable("...")
    } catch (e: Exception) {
        // 异常处理
    }
}

@RequiresApi(Build.VERSION_CODES.P)
suspend fun bitmapSuspendable(url: String): Bitmap = suspendCoroutine {
    thread {
        try {
            it.resume(download(url))
        } catch (e: Exception) {
            it.resumeWithException(e)
        }
    }
}

@RequiresApi(Build.VERSION_CODES.P)
fun download(url: String): Bitmap {
    return Bitmap.createBitmap(Picture())
}

//********************* 异步回调 *********************

fun main() {
    val callback = {
        println("D")
    }
    val task = {
        println("C")
        callback()
    }
    println("A")
    thread(block = task)  // 执行一个线程
    println("B")
}

//******************** 异步代码 *********************

fun main() {
    val task = {
        println("C")
    }
    println("A")
    thread(block = task)  // 执行一个线程
    println("B")
}

二、协程的概念讲解

协程的核心点就是函数或者一端程序能被挂起,稍后再在挂起的为止上恢复。挂起和恢复是开发者的程序逻辑自己控制的,协程是通过主动挂起出让运行权来实现协作的。因此,它的本质就是在讨论程序控制流程的机制,这是最核心的点,任何场景下探讨协程都能落到挂起恢复

 

posted @ 2020-09-06 11:38  灰色飘零  阅读(646)  评论(0)    收藏  举报