A coroutine can be thought of as an instance of suspendable computation

  • launch(推荐):

    • 启动一个新的协程而不将结果返回给调用方,任何被视为“一劳永逸”(one shot)的工作都可以使用 launch 来启动。即,无结果预期的启动协程.
    • 不阻塞当前线程;
    • 返回一个Job,可以级联取消;
  • async:

    • 启动一个新的协程并返回Deferred对象(类似Java的Future),在需要获取结果的地方,调用await的挂起函数等待结果返回。即,有结果预期的启动协程.
    • 不阻塞当前线程
    • 返回Deferred,继承自Job,await方法用于获取结果。
  • 用哪个?

    • 无需性能最优化,无脑用选launch,可以覆盖90+%的场景;
    • **需要性能优化,**考虑使用async 拆分可并行任务或者做预拉取请求,比如:“多个独立耗时操作获取数据,然后聚合”的场景;比如商详页的数据预拉取;
    • 不使用runBlocking;