(五)协程 Coroutine

温馨提示

写博客是为了记录在开发过程中所涉及到的技术以及遇到的问题的解决,如果该博客对您有所帮助,希望可以点个关注/喜欢;如果您对文章中的内容有什么不同的见解,欢迎留言进行讨论。谢谢!

一、协程的概念

  • 协作程序,解决异步问题
  • 应用层完成调度
  • 常见的支持协程的语言如: lua,C#

二、协程要解决什么问题

例如:

现在要开始协程啦{
    //现在在协程里面了
    //花括号内的代码可以是一段运行在UI线程的代码
    val view = ...  //初始化视图
    val image =    //异步加载图片,运行在其他子线程,执行到这一步就挂起,等到子线程返回图片,继续执行,不会阻塞线程
    view.setImage(image)
}
  • 异步代码想同步代码一样直观
  • 简化异步代码异常处理
  • 轻量级的并发方案

三、kotlin如何支持协程

  • 编译器对 suspend 函数的编译支持
  • 标准库的基本API支持
  • kotlinx.coroutine 应用级的支持

四、协程的基本API

  • createCoroutine:创建协程
  • startCoroutine:启动协程
  • suspendCoroutine:挂起协程
  • Continuation 接口:运行控制类,负责结果和异常的返回
  • CoroutineContext 接口:运行上下文,资源持有,运行调度
  • ContinuationInterceptor 接口:协程控制拦截器,可用来处理协程调度

五、协程的执行流程

  • 协程被编译成状态机
  • suspend 函数即状态转移

    《(五)协程 Coroutine》 image.png

六、协程的运行结果

  • 正常的结果通过 resume 返回
  • 异常通过 resumeWithException 抛出

    《(五)协程 Coroutine》 image.png

七、kotlinx.coroutine 框架介绍

  • Kotlin 官方协程应用框架
  • 提供大量对协程API的封装
主要模块说明
kotlin-coroutines-core核心库
kotlin-coroutines-jdk8Java8 支持库
kotlin-coroutines-nio异步IO库
kotlin-coroutines-reactiveReactive Streams 支持
kotlin-coroutines-reactorReactor 支持
kotlin-coroutines-rx1RxJava 1.x 支持
kotlin-coroutines-rx2RxJava 2.x 支持
kotlin-coroutines-androidAndroid UI 支持
kotlin-coroutines-javafxJavaFx UI 支持
kotlin-coroutines-swingSwing UI 支持

上一篇:(四)Kotlin 领域特定语言 DSL

下一篇:(六)Kotlin 与 Java 混合开发

    原文作者:onestravel
    原文地址: https://www.jianshu.com/p/7a4f7c7be652
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞