package Ġcom . pack tp ub . function alk otlin . chapter 0 7 Ċ Ċ fun Ġworking On () Ġ= Ġ" I 'm Ġworking Ġin Ġthread Ġ${ Thread . currentThread (). name }" Ċ Ċ fun Ġlog ( msg : ĠString ) Ġ= Ġprintln ("[ ${ Thread . currentThread (). name }] Ġ$ msg ") Ċ fun Ġlog ( msg : ĠAny ) Ġ= Ġlog ( msg . toString ()) ĊĊ Ċ /* fun Ġmain ( args : ĠArray < String >) Ġ= Ġrun Blocking < Unit > Ġ{ Ċ ĉ val Ġjobs Ġ= ĠlistOf ( Ċĉĉ ĉ launch ( Un conf ined ) Ġ{ Ċĉĉĉ ĉ println (" Un conf ined : Ġ${ working On () }") Ċĉĉ ĉ }, Ċĉĉ ĉ launch ( coroutine Context ) Ġ{ Ċĉĉĉ ĉ println (" coroutine Context : Ġ${ working On () }") Ċĉĉ ĉ }, Ċĉĉ ĉ launch ( Common Pool ) Ġ{ Ċĉĉĉ ĉ println (" Common Pool : Ġ${ working On () }") Ċĉĉ ĉ }, Ċĉĉ ĉ launch ( new Single Thread Context (" My Own Thread ")) Ġ{ Ċĉĉĉ ĉ println (" new STC : Ġ${ working On () }") Ċĉĉ ĉ } Ċ ĉ ) Ċ ĉ jobs . forEach Ġ{ Ġit . join () Ġ} Ċ }*/ Ċ Ċ /* Ċ fun Ġmain ( args : ĠArray < String >) Ġ= Ġrun Blocking < Unit > Ġ{ Ċ ĉ val Ġjobs Ġ= ĠlistOf ( Ċĉĉ ĉ launch ( Un conf ined ) Ġ{ Ċĉĉĉ ĉ println (" Un conf ined : Ġ${ working On () }") Ċĉĉĉ ĉ delay ( 5 0 0 ) Ċĉĉĉ ĉ println (" Un conf ined : Ġ${ working On () }") Ċĉĉ ĉ }, Ċĉĉ ĉ launch ( coroutine Context ) Ġ{ Ċĉĉĉ ĉ println (" coroutine Context : Ġ${ working On () }") Ċĉĉĉ ĉ delay ( 5 0 0 ) Ċĉĉĉ ĉ println (" coroutine Context : Ġ${ working On () }") Ċĉĉ ĉ } Ċ ĉ ) Ċ ĉ jobs . forEach Ġ{ Ġit . join () Ġ} Ċ }*/ Ċ Ċ /* Ċ fun Ġmain ( args : ĠArray < String >) Ġ= Ġrun Blocking < Unit > Ġ{ Ċ ĉ val Ġa Ġ= Ġasync ( coroutine Context ) Ġ{ Ċĉ ĉ log (" I 'm Ġcomputing Ġa Ġpiece Ġof Ġthe Ġanswer ") Ċĉĉ 6 Ċ ĉ } ĊĊ ĉ val Ġb Ġ= Ġasync ( coroutine Context ) Ġ{ Ċĉ ĉ log (" I 'm Ġcomputing Ġanother Ġpiece Ġof Ġthe Ġanswer ") Ċĉĉ 7 Ċ ĉ } ĊĊ ĉ log (" The Ġanswer Ġis Ġ${ a . await () Ġ Ġ+ Ġb . await () }") Ċ }*/ Ċ Ċ /* Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ Ċ ĉ new Single Thread Context (" Ctx 1 "). use Ġ{ Ġctx 1 Ġ-> Ċĉ ĉ new Single Thread Context (" Ctx 2 "). use Ġ{ Ġctx 2 Ġ-> Ċĉĉ ĉ run Blocking ( ctx 1 ) Ġ{ Ċĉĉĉ ĉ println (" Job Ġis Ġ${ coroutine Context [ Job ]} ") Ċĉĉĉ ĉ log (" Started Ġin Ġctx 1 ") Ċĉĉĉ ĉ kotlin x . coroutines . experimental . run ( ctx 2 ) Ġ{ Ċĉĉĉĉ ĉ log (" Working Ġin Ġctx 2 ") Ċĉĉĉ ĉ } Ċĉĉĉ ĉ log (" Back Ġto Ġctx 1 ") Ċĉĉ ĉ } ĊĊĉ ĉ } Ċ ĉ } Ċ }*/ Ċ Ċ /* Ċ fun Ġmain ( args : ĠArray < String >) Ġ= Ġrun Blocking < Unit > Ġ{ Ċ ĉ val Ġrequest Ġ= Ġlaunch Ġ{ Ċĉ ĉ val Ġjob 1 Ġ= Ġlaunch Ġ{ Ċĉĉ ĉ log (" Job 1 : ĠI Ġhave Ġmy Ġown Ġcontext Ġand Ġexecute Ġindependently ") Ċĉĉ ĉ delay ( 1 0 0 0 ) Ċĉĉ ĉ log (" job 1 : ĠI Ġam Ġnot Ġaffected Ġby Ġcancellation Ġof Ġthe Ġrequest ") Ċĉ ĉ } ĊĊĉ ĉ val Ġjob 2 Ġ= Ġlaunch ( coroutine Context ) Ġ{ Ċĉĉ ĉ delay ( 1 0 0 ) Ċĉĉ ĉ log (" job 2 : ĠI Ġam Ġchild Ġof Ġthe Ġrequest Ġcoroutine ") Ċĉĉ ĉ delay ( 1 0 0 0 ) Ċĉĉ ĉ log (" job 2 : ĠI Ġwill Ġnot Ġexecute Ġthis Ġline Ġof Ġmy Ġparent Ġrequest Ġis Ġcancelled ") Ċĉ ĉ } ĊĊĉ ĉ job 1 . join () Ċĉ ĉ job 2 . join () Ċ ĉ } Ċ ĉ delay ( 5 0 0 ) Ċ ĉ request . cancel () Ċ ĉ delay ( 1 0 0 0 ) Ċ ĉ log (" main : ĠWho Ġhas Ġsurv ived Ġrequest Ġcancellation ?") Ċ }*/ Ċ Ċ /* fun Ġmain ( args : ĠArray < String >) Ġ= Ġrun Blocking < Unit > Ġ{ Ċ ĉ val Ġrequest Ġ= Ġlaunch ( coroutine Context ) Ġ{ Ċĉ ĉ val Ġjob 1 Ġ= Ġlaunch ( coroutine Context Ġ+ ĠCommon Pool ) Ġ{ Ċĉĉ ĉ log (" Job 1 : ĠI Ġhave Ġmy Ġown Ġcontext Ġand Ġexecute Ġindependently ") Ċĉĉ ĉ delay ( 1 0 0 0 ) Ċĉĉ ĉ log (" job 1 : ĠI Ġam Ġnot Ġaffected Ġby Ġcancellation Ġof Ġthe Ġrequest ") Ċĉ ĉ } ĊĊĉ ĉ * //* val Ġjob 2 Ġ= Ġlaunch ( coroutine Context ) Ġ{ Ċĉĉ ĉ delay ( 1 0 0 ) Ċĉĉ ĉ log (" job 2 : ĠI Ġam Ġchild Ġof Ġthe Ġrequest Ġcoroutine ") Ċĉĉ ĉ delay ( 1 0 0 0 ) Ċĉĉ ĉ log (" job 2 : ĠI Ġwill Ġnot Ġexecute Ġthis Ġline Ġof Ġmy Ġparent Ġrequest Ġis Ġcancelled ") Ċĉ ĉ } * //* ĊĊĉ ĉ job 1 . join () Ċ // ĉ ĉ job 2 . join () Ċ ĉ } Ċ ĉ delay ( 5 0 0 ) Ċ ĉ request . cancel () Ċ ĉ delay ( 1 0 0 0 ) Ċ ĉ log (" main : ĠWho Ġhas Ġsurv ived Ġrequest Ġcancellation ?") Ċ }*/ Ċ Ċ /* Ċ fun Ġmain ( args : ĠArray < String >) Ġ= Ġrun Blocking < Unit > Ġ{ Ċ ĉ val Ġrequest Ġ= Ġlaunch Ġ{ Ċĉ ĉ repeat ( 3 ) Ġ{ Ġi Ġ-> Ċĉĉ ĉ launch ( coroutine Context ) Ġ{ Ċĉĉĉ ĉ delay (( i Ġ+ Ġ 1 ) Ġ* Ġ 2 0 0 L ) Ċĉĉĉ ĉ log (" Coroutine Ġ$ i Ġis Ġdone ") Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ log (" request : ĠI 'm Ġdone Ġand ĠI Ġdon 't Ġexplicitly Ġjoin Ġmy Ġchildren Ġthat Ġare Ġstill Ġactive ") Ċ ĉ } Ċ ĉ request . join () Ċ ĉ log (" Now Ġprocessing Ġof Ġthe Ġrequest Ġcomplete ") Ċ }*/ Ċ Ċ /* Ċ fun Ġmain ( args : ĠArray < String >) Ġ= Ġrun Blocking < Unit >( Coroutine Name (" main ")) Ġ{ Ċ ĉ log (" started Ġmain Ġcoroutine ") Ċ ĉ val Ġv 1 Ġ= Ġasync ( Coroutine Name (" v 1 coroutine ")) Ġ{ Ċĉ ĉ delay ( 5 0 0 ) Ċĉ ĉ log (" Comp uting Ġv 1 ") Ċĉĉ 2 5 2 Ċ ĉ } ĊĊ ĉ val Ġv 2 Ġ= Ġasync ( Coroutine Name (" v 2 coroutine ")){ Ċĉ ĉ delay ( 1 0 0 0 ) Ċĉ ĉ log (" Comp uting Ġv 2 ") Ċĉĉ 6 Ċ ĉ } ĊĊ ĉ log (" the Ġanswer Ġfor Ġv 1 Ġ/ Ġv 2 Ġ= Ġ${ v 1 . await () Ġ/ Ġv 2 . await () }") Ċ }*/ Ċ Ċ /* Ċ fun Ġmain ( args : ĠArray < String >) Ġ= Ġrun Blocking < Unit > Ġ{ Ċ ĉ val Ġjob Ġ= ĠJob () ĊĉĊ ĉ val Ġcor outines Ġ= ĠList ( 1 0 ) Ġ{ Ġindex Ġ-> ĠĠĊĉ ĉ launch ( coroutine Context , Ġparent Ġ= Ġjob Ġ) Ġ{ Ċĉĉ ĉ delay (( 1 Ġ+ Ġindex ) Ġ* Ġ 2 0 0 L ) Ċĉĉ ĉ log (" Coroutine Ġ$ index Ġis Ġdone ") Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ log (" La unched Ġ${ coroutines . size } Ġcor outines ") Ċ ĉ delay ( 5 0 0 L ) Ċ ĉ log (" C ancell ing Ġthe Ġjob ") Ċ ĉ job . cancel And Join () Ċ }*/ Ċ