协程的设计

扩展库实际上是对这些更底层API的封装, 

Continucation<T>类型的参数,Continuation这个单词翻译成中文就是续体,它的声明如下:

interface Continuation<in T> { 

   val context : CoroutineContext 

   fun resumeWith(result: Result<T>)

}

线程的调用存在阻塞和运行两种状态之间的开销,线程状态的切换开销是一个较大的优化点,

协程本质上可以认为是运行在线程上的代码块, 协程提供的挂起操作会使协程暂停执行, 而不会导致线程阻塞。 

通道基础 :

   一个Channel是一个和BlockingQueue , 和队列不同,一个通道可以被关闭来表明没有更多的元素将会进入通道,

构建通道生产者

val job = launch {

            repeat(1000) {i->

            println();

            delay(500L);

         }

}

父协程的职责

   一个父协程总是等待所有的子协程执行结束, 

val request = launch { 

           repeat(3) {

                 launch {

                        println();   

                }

        }

}

Dispatchers.Unconfined

某些协程库的实现使用了任务分发, 于是可以在协程函数中

CoroutineScope实例来管理协程的生命周期, 

suspend fun <T> retryIO(block: suspend() -> T): T{

  var currDelay = 1000L; 

 while(true) {

        try{

               return block(); 

          }catch(e: IOException) {

 当一个任务出现了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值