Skip to content

Commit ee82cff

Browse files
Add examples for cancellation
1 parent bf223ad commit ee82cff

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.lukaslechner.coroutineusecasesonandroid.playground.cancellation
2+
3+
import kotlinx.coroutines.CancellationException
4+
import kotlinx.coroutines.delay
5+
import kotlinx.coroutines.launch
6+
import kotlinx.coroutines.runBlocking
7+
8+
fun main() = runBlocking {
9+
10+
val job = launch {
11+
repeat(10) { index ->
12+
println("operation number $index")
13+
try {
14+
delay(100)
15+
} catch (exception: CancellationException) {
16+
println("CancellationException was thrown")
17+
throw CancellationException()
18+
}
19+
}
20+
}
21+
22+
delay(250)
23+
println("Cancelling Coroutine")
24+
job.cancel()
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.lukaslechner.coroutineusecasesonandroid.playground.cancellation
2+
3+
import kotlinx.coroutines.*
4+
5+
fun main() = runBlocking<Unit> {
6+
7+
val job = launch(Dispatchers.Default) {
8+
repeat(10) { index ->
9+
if (isActive) {
10+
println("operation number $index")
11+
Thread.sleep(100)
12+
} else {
13+
// perform some cleanup on cancellation
14+
withContext(NonCancellable) {
15+
delay(100)
16+
println("Clean up done!")
17+
}
18+
throw CancellationException()
19+
}
20+
}
21+
}
22+
23+
delay(250)
24+
println("Cancelling Coroutine")
25+
job.cancel()
26+
27+
val globalCoroutineJob = GlobalScope.launch {
28+
repeat(10) {
29+
println("$it")
30+
delay(100)
31+
}
32+
}
33+
delay(250)
34+
globalCoroutineJob.cancel()
35+
delay(1000)
36+
}

0 commit comments

Comments
 (0)