Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 1d97371

Browse files
committed
Create Kotlin Coroutine.md
1 parent e16be97 commit 1d97371

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

‎blogs/Kotlin/Kotlin Coroutine.md‎

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
---
2+
Kotlin Coroutine
3+
---
4+
5+
#### 目录
6+
7+
1. 启动协程的三种方式
8+
2. 挂起函数
9+
10+
#### 启动协程
11+
12+
启动协程有三种方式,分别是 launch、runBlocking、async。
13+
14+
launch 不会阻塞当前程序的执行流程,也无法获取协程的执行结果。它有点像是生活中的射箭。
15+
16+
runBlocking 可以获取协程的执行结果,但这种方式会阻塞代码的执行流程,因此它一般用于测试用途,生产环境当中是不推荐使用的。
17+
18+
async,则是很多编程语言当中普遍存在的协程模式。它像是结合了 launch 和 runBlocking 两者的优点。它既不会阻塞当前的执行流程,还可以直接获取协程的执行结果。它有点像是生活中的钓鱼。
19+
20+
#### 挂起函数
21+
22+
挂起函数可以极大地简化异步编程,让我们能够以同步的方式写异步代码。相比 "回调地狱" 式的代码,挂起函数写出来的代码可读性更好、扩展性更好、维护性更好,也更难出错。
23+
24+
1. 要定义挂起函数,只需要加上 suspend 关键字。这个关键字会改变函数类型的。
25+
2. 挂起函数拥有挂起和恢复的能力,因此对于同一行代码来说,"=" 左右两边的代码分别可以执行在不同的线程之上。
26+
3. 挂起函数的本质,就是 Callback。在 Kotlin 中被称为 Continuation。而 Kotlin 编译器将 suspend 翻译成 Continuation 的过程,则是 CPS 转换。这里的 Continuation 是代表了 "程序继续运行下去需要执行的代码"、"接下来要执行的代码" 或者 "剩下的" 代码。
27+
28+
挂起函数,只能在协程当中被调用,或者是被其他挂起函数调用。但协程中的 block,本质上仍然是挂起函数。
29+
30+
所以我们可以认为,挂起和恢复是协程的一种底层能力;而挂起函数则是一种上层的表现形式。

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /