赞
踩
前言
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)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。