Kotlin 协程之一:基础使用

系列文章:
Kotlin 协程之一:基础使用
Kotlin 协程之二:原理剖析
Kotlin 协程之三:Android中的应用

一.什么是协程

kotlin在1.3版本后,提供了协程coroutine库,协程提供了一种,简化异步任务处理的方案。

二.为什么用协程

1.简化代码,增加可读性

使用协程可以用简洁直观可读性高的写法,实现多重依赖关系的异步任务的书写。

先来回想一下我们平时的异步任务怎么实现呢?

(1).通过Callback回调的方式

//get token
TokenCall().addCallback(object:Callback{
   
  override fun onCall(token: String) {
   
    //get data with token
    DataCall(token).addCallback(object :Callback{
   
      override fun onCall(data: String) {
   
        //do something with data...
      }
    })
  }
})

这种经典实现的问题就不用多说了,代码量大,可读性差,还有最严重的回调地狱。

(2)通过链式调用

fun getToken():String{
   }
fun getData(token:String):String{
   }
Single.fromCallable {
   
  //get token
  getToken()
}.map {
   token->
  //get data with token
  getData(token)
}.subscribe {
   data->
  //do something with data...
}

RXJava这种链式实现多重依赖的异步任务的方法,是现在我们用的最多的方案,可以有效地解决回调地狱的问题,相比于callback回调,可读性也增加了许多。

除了RXJava,java8提供的CompletableFuture、JS中提供的Promise,都是类似的解决方案。

这种写法虽然将异步任务过程打平的展现出来,但是毕竟还是在各个异步任务逻辑外面,套了一层RXJava的api,那有没有更简单的方法,只通过异步任务的逻辑代码的组合,就实现多重依赖的异步任务的处理呢?kotlin的协程为我们提供了一种方案。

(3)通过kotlin的协程

//挂起函数
suspend fun getToken() = suspendCancellableCoroutine<String>{
   }
suspend fun getData(token:String) = suspendCancellableCoroutine<String> {
   }
GlobalScope.launch {
   
  //get token
  val token = getToken()
  //get data with token
  val data = getData(token)
  
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值