协程1-suspend关键字

2020-08-24  本文已影响0人  Xigong

suspend 有两个:

suspend 函数的执行原理:

例如:


image.png

编译后生成了:


image.png

编译生成了:


image.png

翻译成伪代码帮助理解(忽略一些无关因素):

image.png

总结,调用挂起函数的地方,编译器添加了判断条件,进行返回,然后再恢复时,重新调用该方法,又回到了上次函数返回的地方。

再总结一遍,挂起函数,编辑器在内部生成了一个Continuation,然后执行到挂起点,return。接着协程恢复时,通过上一次记录的位置,又调用这个函数,跳转到上一次的结束位置,继续执行,往复循环,直到函数执行结束且没有再继续执行Continuation

QA:

  1. 再次调用这个函数又能回到上次执行完的地方是怎么实现的呢?
    举一个复杂的例子


    image.png

是通过switch和label,实现的,Continuaion 会记录上一次离开函数的位置


image.png

下一执行的时候,会判断label这个值


image.png

break ,然后会走到这里:


image.png

延迟5秒后,继续执行contrinuation,又会执行test1函数,直到全部执行完毕。

上一篇 下一篇

猜你喜欢

热点阅读