*上一期咱们主要介绍了协程的相关函数,以及协程的建立。这一期,咱们主要来介绍协程怎么进行协做的,而协做也正是协程的精华所在,小伙伴们,小板凳带好了嘛?≧◠◡◠≦✌* 生活当中咱们作事情常常都是不可能一干到底的。好比,你正在看书,这时候忽然来了个电话,或者说你在跟朋友家人视频聊天,这时候忽然没信号了了。在这种状况下,咱们都不得不停下原先手中的事情,去处理其余事情,等其余事情处理完了,再接着原先的事情往下走。为了处理这样的问题,协程也提供了协做机制。咱们先来看看下面的一个简单实例。
--建立一个协程,但尚未调用 read_co = coroutine.create( function () print("看书") print("有电话打进来") coroutine.yield() print("电话打完了,继续看书") end ) --开启读书协程 coroutine.resume(read_co) print("打电话") coroutine.resume(read_co)
看书 有电话打进来 打电话 电话打完了,继续看书
实例经过coroutine.yield()挂起协程,而后又经过coroutine.resume切换回协程,继续往下执行。是否是很简单?接下来咱们来看下coroutine.yield跟coroutine.resume更深一步的作法,咱们仍是直接看实例吧。异步
--建立一个协程,但尚未调用 read_co = coroutine.create( function () print("看书") print("有电话打进来") local ret1, ret2 = coroutine.yield("我读到第三章了", "第二章很精彩") print("ret1 = "..ret1) print("ret2 = "..ret2) print("电话打完了,继续看书") end ) --开启读书协程 local ret1, ret2, ret3 = coroutine.resume(read_co) print(ret1) print("ret2 = "..ret2) print("ret3 = "..ret3) print("打电话") coroutine.resume(read_co,"王老师打来的电话","让我读第五章")
运行结果:函数
看书 有电话打进来 true ret2 = 我读到第三章了 ret3 = 第二章很精彩 打电话 ret1 = 王老师打来的电话 ret2 = 让我读第五章 电话打完了,继续看书
从这个实例咱们能够看到coroutine.yield的参数能够返回给前一个coroutine.resume。这里须要注意的是coroutine.resume的第一个返回值是协程运行是否出错,经过打印咱们能够知道这里要么等于true要么等于false。从第二个返回值开始才是coroutine.yield传出来的值。协程使用coroutine.yield挂起以后,如何使它继续执行呢?仍是要经过coroutine.resume,这时候coroutine.yield的返回值也就是coroutine.resume的入参信息。这里童鞋们看明白了嘛?
好了,今天协程内容就介绍到这里,明天咱们继续深刻探讨协程的协做问题,以及协做在异步通讯的具体应用~~~code