import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . coroutine Scope Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġkotlin . system . measure Time Millis ĊĊ Ċ fun Ġmain Comp osing 3 () Ġ= Ġrun Blocking < Unit > Ġ{ ĊĠĠĠ Ġval Ġtime Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfailed Concurrent Sum () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch ( e : ĠArithmetic Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Computation Ġfailed Ġwith ĠArithmetic Exception ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprintln (" Total Ġtime Ġspent : Ġ${ time } ms ") Ċ Ċ } Ċ Ċ suspend Ġfun Ġfailed Concurrent Sum (): ĠInt Ġ= Ġcoroutine Scope Ġ{ ĊĠĠĠ Ġval Ġone Ġ= Ġasync < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( Long . MAX _ VALUE ) Ġ// ĠE mul ates Ġvery Ġlong Ġcomputation ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 2 ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" First Ġchild Ġwas Ġcancelled ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġtwo Ġ= Ġasync < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġprintln (" Second Ġchild Ġthrows Ġan Ġexception ") ĊĠĠĠĠĠĠĠ Ġthrow ĠArithmetic Exception () Ġ// Ġthis Ġthrow Ġwill Ġstop Ġupper Ġcoroutine Ġbecause Ġthey Ġare Ġin Ġthe Ġsame Ġscope ĊĠĠĠ Ġ} ĊĠĠĠ Ġone . await () Ġ+ Ġtwo . await () Ċ } Ċ Ċ fun Ġmain Comp osing 2 () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġval Ġtime Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" sum Ġ${ concurrent Sum () }") ĊĠĠĠ Ġ} ĊĠĠĠ Ġprintln (" time Ġtaken : Ġ$ time ") Ċ Ċ } Ċ Ċ suspend Ġfun Ġconcurrent Sum (): ĠInt Ġ= Ġcoroutine Scope Ġ{ ĊĠĠĠ Ġval Ġone Ġ= Ġasync Ġ{ Ġdo Something Use ful One () Ġ} ĊĠĠĠ Ġval Ġtwo Ġ= Ġasync Ġ{ Ġdo Something Use ful Two () Ġ} ĊĠĠĠ Ġone . await () Ġ+ Ġtwo . await () Ċ } ĊĊ Ċ fun Ġmain Comp osing 1 () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġval Ġtime Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠ Ġ// val Ġone Ġ= Ġasync Ġ{ Ġdo Something Use ful One () Ġ} ĊĠĠĠĠĠĠĠ Ġ// val Ġtwo Ġ= Ġasync Ġ{ Ġdo Something Use ful Two () Ġ} Ċ Ċ // ĠĠĠĠĠĠĠ Ġval Ġone Ġ= Ġasync ( start Ġ= ĠCor outine Start . LA ZY ) Ġ{ Ġdo Something Use ful One () Ġ} Ċ // ĠĠĠĠĠĠĠ Ġval Ġtwo Ġ= Ġasync ( start Ġ= ĠCor outine Start . LA ZY ) Ġ{ Ġdo Something Use ful Two () Ġ} Ċ // ĠĠĠĠĠĠĠ Ġone . start () Ċ // ĠĠĠĠĠĠĠ Ġtwo . start () ĊĊĠĠĠĠĠĠĠ Ġval Ġone Ġ= Ġsomething Use ful One Async () ĊĠĠĠĠĠĠĠ Ġval Ġtwo Ġ= Ġsomething Use ful Two Async () ĊĠĠĠĠĠĠĠ Ġprintln (" The Ġanswer Ġis Ġ${ one . await () Ġ+ Ġtwo . await () }") ĊĠĠĠ Ġ} ĊĠĠĠ Ġprintln (" Completed Ġin Ġ$ time Ġms ") Ċ } Ċ Ċ fun Ġsomething Use ful One Async () Ġ= ĠGlobal Scope . async Ġ{ ĊĠĠĠ Ġdo Something Use ful One () Ċ } Ċ Ċ // ĠThe Ġresult Ġtype Ġof Ġsomething Use ful Two Async Ġis ĠDeferred < Int > Ċ fun Ġsomething Use ful Two Async () Ġ= ĠGlobal Scope . async Ġ{ ĊĠĠĠ Ġdo Something Use ful Two () Ċ } ĊĊ Ċ suspend Ġfun Ġdo Something Use ful One (): ĠInt Ġ{ ĊĠĠĠ Ġdelay ( 1 0 0 0 L ) Ġ// Ġpret end Ġwe Ġare Ġdoing Ġsomething Ġuseful Ġhere ĊĠĠĠ Ġreturn Ġ 1 3 Ċ } Ċ Ċ suspend Ġfun Ġdo Something Use ful Two (): ĠInt Ġ{ ĊĠĠĠ Ġdelay ( 1 0 0 0 L ) Ġ// Ġpret end Ġwe Ġare Ġdoing Ġsomething Ġuseful Ġhere , Ġtoo ĊĠĠĠ Ġreturn Ġ 2 9 Ċ } Ċ