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 c4462e2

Browse files
committed
Update Kotlin Coroutine.md
1 parent 1d97371 commit c4462e2

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

‎blogs/Kotlin/Kotlin Coroutine.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ Kotlin Coroutine
66

77
1. 启动协程的三种方式
88
2. 挂起函数
9+
2. 协程的生命周期
10+
2.
911

1012
#### 启动协程
1113

@@ -27,4 +29,20 @@ async,则是很多编程语言当中普遍存在的协程模式。它像是结
2729

2830
挂起函数,只能在协程当中被调用,或者是被其他挂起函数调用。但协程中的 block,本质上仍然是挂起函数。
2931

30-
所以我们可以认为,挂起和恢复是协程的一种底层能力;而挂起函数则是一种上层的表现形式。
32+
所以我们可以认为,挂起和恢复是协程的一种底层能力;而挂起函数则是一种上层的表现形式。
33+
34+
#### 协程的生命周期
35+
36+
Job 是 launch 的返回值,Deferred 是 async 的返回值,而 Deferred 也是实现了 Job 的接口。
37+
38+
协程是有生命周期的,同时协程是结构化的。具体来说有以下几点:
39+
40+
1. Job,相当于协程的句柄,Job 与协程的关系,有点像 "遥控器与空调的关系"。
41+
2. Job 在它的内部,维护了一系列的生命周期状态,它也对应着协程的生命周期状态。
42+
3. 通过 Job,我们可以监测协程的状态,比如 isActive、isCancelled、isCompleted;另外,我们也可以一定程度的操控协程的状态,比如 start()、cancel()。
43+
4. 除此之外,我们还可以通过 Job.invokeOnCompletion{ } 来监听协程执行完毕的事件;通过 Job.join() 这个挂起函数,我们可以挂起当前协程的执行流程,等到协程执行完毕以后,再恢复执行后面的代码。
44+
5. 而对于 Deferred.await(),它的行为模式和 Job.join() 类似,只是它还会返回协程的执行结果。
45+
6. 另外,协程是结构化的并发,这是它的第二大优势。通过分析 Job 的源码,我们发现,一个 Job 可以拥有多个 ChildJob;对应的,协程也可以拥有多个 "子协程"。
46+
7. 结构化并发的最大优势在于,我们可以实现只控制 "父协程",从而达到控制一堆子协程的目的。parentJob.join() 不仅仅只会等待它自身执行完毕,还会等待它内部的 job1、job2、job3 执行完毕,parentJon.cancel() 同理。
47+
48+
####

0 commit comments

Comments
(0)

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