367 字
2 分钟
浅谈一下设计Kotlin异步库
开始
Kotlin引入了一个新的概念: 挂起 这个词的英文翻译为 suspend 顾名思义就是将一段代码挂起执行
但是这个挂起并不是可以并行, 而是自动切换到另外一个线程之后再自动切回挂起之前的线程(可以是主线程也可以是任意线程), Kotlin会隐式的给所有被suspend修饰符修饰的函数加上一个参数 @NotNull Continuation<? super @NotNull Unit> $completion, 这是在Java中的表现形式
public class Test implements OneBotListener {
@Override
public @Nullable Object onGroupMessage(@NotNull GroupMessage message, @NotNull String json, @NotNull Continuation<? super @NotNull Unit> $completion) {
return $completion;
}
}所有函数都需要返回一个上下文参数
$completion来确定上下文以便恢复被挂起的协程, 这就是为什么 普通的函数无法调用挂起函数: 因为普通函数没有上下文参数
设计异步库
在IDEA中定义了一个标准: 所有的接口和抽象类的函数如果没有用到被suspend修饰的函数不会被IDE提示移除多余的
suspend关键字, 所以想要设计一个好的异步库, OOP基础很重要, 尽量使你的库全部以 Base -> BaseImpl的形式存在
小结
Kotlin协程库在
Kotlin/JVM平台上本质上还是包装了线程这一套, 因为JVM中并没有协程的概念
在其他平台上Kotlin就有了协程的概念