@@ -46,7 +46,7 @@ class CancellationTimeOutsGuideTest {
46
46
import kotlinx.coroutines.*
47
47
48
48
fun main () = runBlocking {
49
- // 示例开始
49
+ // sampleStart
50
50
val job = launch {
51
51
repeat(1000 ) { i ->
52
52
println (" I'm sleeping $i ..." )
@@ -58,7 +58,7 @@ fun main() = runBlocking {
58
58
job.cancel() // 取消该任务
59
59
job.join() // 等待任务执行结束
60
60
println (" main: Now I can quit." )
61
- // 示例结束
61
+ // sampleEnd
62
62
}
63
63
```
64
64
@@ -85,7 +85,7 @@ main: Now I can quit.
85
85
### 取消协作
86
86
87
87
协程的取消是 _ 协作_ 的。一段协程代码必须合作才能被取消。
88
- 所有 ` kotlinx.coroutines ` 中的暂停函数都是 _ 可被取消的_ 。它们检查协程的取消,
88
+ 所有 ` kotlinx.coroutines ` 中的挂起函数都是 _ 可被取消的_ 。它们检查协程的取消,
89
89
并在取消时抛出 [ CancellationException] 。 然而,如果协程正在执行<!--
90
90
-->计算任务,并且没有检查取消的话,那么它是不能被取消的,就如如下示例<!--
91
91
-->代码所示:
@@ -96,7 +96,7 @@ main: Now I can quit.
96
96
import kotlinx.coroutines.*
97
97
98
98
fun main () = runBlocking {
99
- // 示例开始
99
+ // sampleStart
100
100
val startTime = System .currentTimeMillis()
101
101
val job = launch(Dispatchers .Default ) {
102
102
var nextPrintTime = startTime
@@ -113,7 +113,7 @@ fun main() = runBlocking {
113
113
println (" main: I'm tired of waiting!" )
114
114
job.cancelAndJoin() // 取消一个任务并且等待它结束
115
115
println (" main: Now I can quit." )
116
- // 示例结束
116
+ // sampleEnd
117
117
}
118
118
```
119
119
@@ -137,7 +137,7 @@ main: Now I can quit.
137
137
### 使执行计算的代码可被取消
138
138
139
139
我们有两种方法来使执行计算的代码可以被取消。第一种方法是定期<!--
140
- -->调用暂停函数来检查取消 。 对于这种目的 [ yield] 是一个好的选择。
140
+ -->调用挂起函数来检查取消 。 对于这种目的 [ yield] 是一个好的选择。
141
141
另一种方法是明确的检查取消状态。让我们试试第二种方法。
142
142
143
143
将前一个示例中的 ` while (i < 5) ` 替换为 ` while (isActive) ` 并重新运行它。
@@ -148,7 +148,7 @@ main: Now I can quit.
148
148
import kotlinx.coroutines.*
149
149
150
150
fun main () = runBlocking {
151
- // 示例开始
151
+ // sampleStart
152
152
val startTime = System .currentTimeMillis()
153
153
val job = launch(Dispatchers .Default ) {
154
154
var nextPrintTime = startTime
@@ -165,7 +165,7 @@ fun main() = runBlocking {
165
165
println (" main: I'm tired of waiting!" )
166
166
job.cancelAndJoin() // 取消该任务并等待它结束
167
167
println (" main: Now I can quit." )
168
- // 示例结束
168
+ // sampleEnd
169
169
}
170
170
```
171
171
@@ -187,7 +187,7 @@ main: Now I can quit.
187
187
### 在finally中释放资源
188
188
189
189
我们通常使用如下的方法处理在被取消时抛出 [ CancellationException] 的可被取消<!--
190
- -->的暂停函数 。比如说,` try {...} finally {...} ` 表达式以及 Kotlin 的 ` use ` 函数一般在协程被取消的时候<!--
190
+ -->的挂起函数 。比如说,` try {...} finally {...} ` 表达式以及 Kotlin 的 ` use ` 函数一般在协程被取消的时候<!--
191
191
-->执行它们的终结动作:
192
192
193
193
@@ -197,7 +197,7 @@ main: Now I can quit.
197
197
import kotlinx.coroutines.*
198
198
199
199
fun main () = runBlocking {
200
- // 示例开始
200
+ // sampleStart
201
201
val job = launch {
202
202
try {
203
203
repeat(1000 ) { i ->
@@ -212,7 +212,7 @@ fun main() = runBlocking {
212
212
println (" main: I'm tired of waiting!" )
213
213
job.cancelAndJoin() // 取消该任务并且等待它结束
214
214
println (" main: Now I can quit." )
215
- // 示例结束
215
+ // sampleEnd
216
216
}
217
217
```
218
218
@@ -236,10 +236,10 @@ main: Now I can quit.
236
236
237
237
### 运行不能被取消的代码块
238
238
239
- 在前一个例子中任何尝试在 ` finally ` 块中调用暂停函数的行为都会抛出
239
+ 在前一个例子中任何尝试在 ` finally ` 块中调用挂起函数的行为都会抛出
240
240
[ CancellationException] ,因为这里持续运行的代码是可以被取消的。通常,这并不是一个<!--
241
241
-->问题,所有良好的关闭操作(关闭一个文件、取消一个任务,或是关闭任何一种<!--
242
- -->通信通道)通常都是非阻塞的,并且不会调用任何暂停函数 。然而,在<!--
242
+ -->通信通道)通常都是非阻塞的,并且不会调用任何挂起函数 。然而,在<!--
243
243
-->真实的案例中,当你需要挂起一个被取消的协程,你可以将相应的代码包装在
244
244
` withContext(NonCancellable) {...} ` 中,并使用 [ withContext] 函数以及 [ NonCancellable] 上下文,见如下示例所示:
245
245
@@ -249,7 +249,7 @@ main: Now I can quit.
249
249
import kotlinx.coroutines.*
250
250
251
251
fun main () = runBlocking {
252
- // 示例开始
252
+ // sampleStart
253
253
val job = launch {
254
254
try {
255
255
repeat(1000 ) { i ->
@@ -268,7 +268,7 @@ fun main() = runBlocking {
268
268
println (" main: I'm tired of waiting!" )
269
269
job.cancelAndJoin() // 取消该任务并等待它结束
270
270
println (" main: Now I can quit." )
271
- // 示例结束
271
+ // sampleEnd
272
272
}
273
273
```
274
274
@@ -300,14 +300,14 @@ main: Now I can quit.
300
300
import kotlinx.coroutines.*
301
301
302
302
fun main () = runBlocking {
303
- // 示例开始
303
+ // sampleStart
304
304
withTimeout(1300L ) {
305
305
repeat(1000 ) { i ->
306
306
println (" I'm sleeping $i ..." )
307
307
delay(500L )
308
308
}
309
309
}
310
- // 示例结束
310
+ // sampleEnd
311
311
}
312
312
```
313
313
@@ -342,7 +342,7 @@ Exception in thread "main" kotlinx.coroutines.TimeoutCancellationException: Time
342
342
import kotlinx.coroutines.*
343
343
344
344
fun main () = runBlocking {
345
- // 示例开始
345
+ // sampleStart
346
346
val result = withTimeoutOrNull(1300L ) {
347
347
repeat(1000 ) { i ->
348
348
println (" I'm sleeping $i ..." )
@@ -351,7 +351,7 @@ fun main() = runBlocking {
351
351
" Done" // 在它运行得到结果之前取消它
352
352
}
353
353
println (" Result is $result " )
354
- // 示例结束
354
+ // sampleEnd
355
355
}
356
356
```
357
357
0 commit comments