package Ġcor outines Ċ Ċ import Ġkotlinx . coroutines .* Ċ import Ġjava . lang . Arithmetic Exception Ċ import Ġkotlin . system . measure Time Millis Ċ Ċ suspend Ġfun Ġdo Something Use ful One (): ĠInt Ġ{ ĊĠĠĠ Ġdelay ( 2 0 0 L ) ĊĠĠĠ Ġreturn Ġ 1 3 Ċ } Ċ Ċ suspend Ġfun Ġdo Something Use ful Two (): ĠInt Ġ{ ĊĠĠĠ Ġdelay ( 2 0 0 L ) ĊĠĠĠ Ġreturn Ġ 2 9 Ċ } Ċ Ċ fun Ġdefault Sequential () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġval Ġtime Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġone Ġ= Ġdo Something Use ful One () ĊĠĠĠĠĠĠĠ Ġval Ġtwo Ġ= Ġdo Something Use ful Two () ĊĠĠĠĠĠĠĠ Ġprintln (" The Ġanswer Ġis Ġ${ one Ġ+ Ġtwo }") ĊĠĠĠ Ġ} ĊĠĠĠ Ġprintln (" Completed Ġin Ġ$ time Ġms ") Ċ } Ċ Ċ fun Ġasync Concurrency () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġval Ġtime Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġone Ġ= Ġasync Ġ{ Ġdo Something Use ful One () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtwo Ġ= Ġasync Ġ{ Ġdo Something Use ful Two () Ġ} ĊĠĠĠĠĠĠĠ Ġprintln (" The Ġanswer Ġis Ġ${ one . await () Ġ+ Ġtwo . await () }") ĊĠĠĠ Ġ} ĊĠĠĠ Ġprintln (" Completed Ġin Ġ$ time Ġms ") Ċ } Ċ Ċ fun Ġlazy Async () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġval Ġtime Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠ Ġ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 () ĊĠĠĠĠĠĠĠ Ġ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 () Ċ } Ċ Ċ fun Ġsomething Use ful Two Async () Ġ= ĠGlobal Scope . async Ġ{ ĊĠĠĠ Ġdo Something Use ful Two () Ċ } Ċ Ċ fun Ġasync Style Function () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġval Ġtime Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠ Ġ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 ") Ċ } Ċ Ċ 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 Ġasync Structured Concurrency () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġval Ġtime Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" The Ġanswer Ġis Ġ${ concurrent Sum () }") ĊĠĠĠ Ġ} ĊĠĠĠ Ġprintln (" Completed Ġin Ġ$ time Ġms ") Ċ } Ċ Ċ suspend Ġfun Ġfailed Concurrent Sum (): ĠInt Ġ= Ġcoroutine Scope Ġ{ ĊĠĠĠ Ġval Ġone Ġ= Ġasync < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( Long . MAX _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 2 ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" First Ġchild Ġwas Ġcancelled ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġtwo Ġ= Ġasync < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Second Ġchild Ġthrows Ġan Ġexception ") ĊĠĠĠĠĠĠĠ Ġthrow ĠArithmetic Exception () ĊĠĠĠ Ġ} ĊĠĠĠ Ġone . await () Ġ+ Ġtwo . await () Ċ } Ċ Ċ fun Ġprocess Failed Concurrency () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġfailed Concurrent Sum () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠArithmetic Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Computation Ġfailed Ġwith ĠArithmetic Exception ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġdefault Sequential () ĊĠĠĠ Ġasync Concurrency () ĊĠĠĠ Ġlazy Async () ĊĠĠĠ Ġasync Style Function () ĊĠĠĠ Ġasync Structured Concurrency () ĊĠĠĠ Ġprocess Failed Concurrency () Ċ }