File tree Expand file tree Collapse file tree 5 files changed +122
-0
lines changed
app/src/main/java/com/lukaslechner/coroutineusecasesonandroid/playground/structuredconcurrency Expand file tree Collapse file tree 5 files changed +122
-0
lines changed Original file line number Diff line number Diff line change 1+ package com.lukaslechner.coroutineusecasesonandroid.playground.structuredconcurrency
2+
3+ import kotlinx.coroutines.*
4+
5+ val scope = CoroutineScope (Dispatchers .Default )
6+
7+ fun main () = runBlocking<Unit > {
8+
9+ val job = scope.launch {
10+ delay(100 )
11+ println (" Coroutine completed" )
12+ }
13+
14+ job.invokeOnCompletion { throwable ->
15+ if (throwable is CancellationException ) {
16+ println (" Coroutine was cancelled" )
17+ }
18+ }
19+
20+ delay(50 )
21+ onDestroy()
22+ }
23+
24+ fun onDestroy () {
25+ println (" life-time of scope ends" )
26+ scope.cancel()
27+ }
Original file line number Diff line number Diff line change 1+ package com.lukaslechner.coroutineusecasesonandroid.playground.structuredconcurrency
2+
3+ import kotlinx.coroutines.*
4+
5+ fun main () {
6+
7+ val scopeJob = Job ()
8+ val scope = CoroutineScope (Dispatchers .Default + scopeJob)
9+
10+ val passedJob = Job ()
11+ val coroutineJob = scope.launch(passedJob) {
12+ println (" Starting coroutine" )
13+ delay(1000 )
14+ }
15+
16+ println (" passedJob and coroutineJob are references to the same job object: ${passedJob == = coroutineJob} " )
17+
18+ println (" Is coroutineJob a child of scopeJob? =>${scopeJob.children.contains(coroutineJob)} " )
19+ }
Original file line number Diff line number Diff line change 1+ package com.lukaslechner.coroutineusecasesonandroid.playground.structuredconcurrency
2+
3+ import kotlinx.coroutines.*
4+
5+ fun main () = runBlocking<Unit > {
6+
7+ val scope = CoroutineScope (Dispatchers .Default )
8+
9+ val parentCoroutineJob = scope.launch {
10+ launch {
11+ delay(1000 )
12+ println (" Child Coroutine 1 has completed!" )
13+ }
14+ launch {
15+ delay(1000 )
16+ println (" Child Coroutine 2 has completed!" )
17+ }
18+ }
19+
20+ parentCoroutineJob.join()
21+ println (" Parent Coroutine has completed!" )
22+ }
Original file line number Diff line number Diff line change 1+ package com.lukaslechner.coroutineusecasesonandroid.playground.structuredconcurrency
2+
3+ import kotlinx.coroutines.*
4+
5+ fun main () = runBlocking<Unit > {
6+
7+ val scope = CoroutineScope (Dispatchers .Default )
8+
9+ scope.coroutineContext[Job ]!! .invokeOnCompletion { throwable ->
10+ if (throwable is CancellationException ) {
11+ println (" Parent job was cancelled" )
12+ }
13+ }
14+
15+ val childCoroutine1Job = scope.launch {
16+ delay(1000 )
17+ println (" Coroutine 1 completed" )
18+ }
19+ childCoroutine1Job.invokeOnCompletion { throwable ->
20+ if (throwable is CancellationException ) {
21+ println (" Coroutine 1 was cancelled!" )
22+ }
23+ }
24+
25+ scope.launch {
26+ delay(1000 )
27+ println (" Coroutine 2 completed" )
28+ }.invokeOnCompletion { throwable ->
29+ if (throwable is CancellationException ) {
30+ println (" Coroutine 2 was cancelled!" )
31+ }
32+ }
33+
34+ delay(200 )
35+
36+ childCoroutine1Job.cancelAndJoin()
37+
38+ // scope.coroutineContext[Job]!!.cancelAndJoin()
39+ }
Original file line number Diff line number Diff line change 1+ package com.lukaslechner.coroutineusecasesonandroid.playground.structuredconcurrency
2+
3+ import kotlinx.coroutines.GlobalScope
4+ import kotlinx.coroutines.Job
5+ import kotlinx.coroutines.launch
6+
7+ fun main () {
8+
9+ println (" Job of GlobalScope: ${GlobalScope .coroutineContext[Job ]} " )
10+
11+ GlobalScope .launch {
12+
13+ }
14+
15+ }
You can’t perform that action at this time.
0 commit comments