对于这样的 suspend fun :
suspend fun foo(p1 : P1, ..., pn : Pn) : R {
...
suspendFun(...)
...
return resultR
}
其编译期生成的代码类似这样(这里只考虑方法体里只调用了一次 suspend 方法的情况;如果调用了 n 次 suspend 方法,switch 块会被 n - 1 层 label 标签块嵌套包围):
@Nullable
public Object foo(P1 p1, ..., Pn pn, @NotNull Continuation continuation) {
class LocalContinuationImpl extends kotlin.coroutines.jvm.internal.ContinuationImpl {
// 保存 suspend 方法执行结果
Object result;
// 状态机状态标记
int label;
// 用于保存局部临时变量
Object L$0;
...
Object L$x;
public LocalContinuationImpl(@Nullable Continuation<Object> completion) {
super(completion);
}
@Nullable
@Override
protected Object invokeSuspend(@NotNull Object lastResult) {
result = lastResult;
label |= Integer.MIN_VALUE;
return foo(null
381




被折叠的 条评论
为什么被折叠?



