Kotlin 协程学习记录

//Kotlin 协程
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.2.1"

属性:

  1、runBlocking:会一直阻塞到块中的代码执行完

runBlocking {
      val job = launch {
            repeat(10) {//循环
                  delay(1000)
                  Log.e("zxy", "张三疯")
            }
      }
      job.join()//等待直到子协程执行结束  主协程与后台作业的持续时间没有任何关系了
      Log.e("zxy", "张老爷")
}

2、lauch:开启一个工作协程Job

3、job.cancel() // 取消一个协程

4、job.cancelAndJoin() // 取消一个协程并且等待它结束

5、Job.join://等待直到子协程执行结束,结构化的并发,无结果

6、delay:非阻塞的函数,挂起,协程进入线程池空闲线程,类似于sleep

7、repeat:协程中循环

8、async和await:协程中异步执行及等待异步结果再执行,结构化的并发,有结果

 GlobalScope.launch {
     val async = async {
          "张三疯"
      }
      Log.e("zxy", async.await())//等待async执行的结果
 }

9、coroutineScope :(感觉作用不大)线程作用域,不会阻塞当前线程,所有已启动子协程执行完毕之前不会结束

10、suspend:挂起函数,调用suspend方法, 异步的数据像同步一样return了

//挂起方法 
suspend fun downLoad(){
     Log.i("log", "World")
  }

11、withContext(NonCancellable) {……},在finally 中,关闭一个文件、取消一个作业、或是关闭任何一种通信通道

12、withTimeout和withTimeoutOrNull操作超时

runBlocking {
    withTimeout(1300L) {
        repeat(1000) { i ->
            Log.i("log","I'm sleeping $i ...")
            delay(500L)
        }
    }
}

13、send和receive的使用

runBlocking {
    val channel = Channel<Int>()//实例化通道
    launch {
        for (x in 1..5) channel.send(x * x)
        channel.close()//此处关闭通道
    }
    repeat(5) {
        //这里保证所有先前发送出去的元素都在通道关闭前被接收到。
        Log.i("log", "${channel.receive()}")
    }
}

 

 https://www.jianshu.com/p/6cadc0c9ac00

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值