当前位置:   article > 正文

【手写协程】 实现kotlin版yield与resume_kotlin yield

kotlin yield

前言
yield(挂起)与resume(恢复)是一种常见的协程实现,例如在Lua语言中的协程就是这样实现的
但是在kotlin中并没有这种语法,而是直接的launch
本文主要通过手写实现kotlin版的yield与resume
有助于读者更加深入地理解协程挂起与恢复的原理
Lua协程是怎么使用的?
1.coroutine.create() 创建 coroutine,返回 coroutine, 参数是一个函数,当和 resume 配合使用的时候就唤醒函数调用
2.coroutine.resume() 重启 coroutine(重启时不用再传参数),和 create 配合使用
3.coroutine.yield() 挂起 coroutine,将 coroutine 设置为挂起状态,这个和 resume 配合使用能有很多有用的效果(返回参数)
我们要达成的效果
我们将利用kotlin协程api,实现Lua协程效果,并实现一个生产者消费者的demo
最后调用如下:

suspend fun main() {
    val producer = Coroutine.create<Unit, Int>(Dispatcher()) {
        for (i in 0..3) {
            log("send", i)
            yield(i)
        }
        200
    }

    val consumer = Coroutine.create<Int, Unit>(Dispatcher()) { param: Int ->
        log("start", param)
        for (i in 0..3) {
            val value = yield(Unit)
     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/277517
推荐阅读
相关标签
  

闽ICP备14008679号