package Ġcor outines Ċ Ċ import Ġcom . sun . management . j mx . Trace . send Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . channels . Receive Channel Ċ import Ġkotlinx . coroutines . channels . produce Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġkotlinx . coroutines . run Blocking Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ= Ġrun Blocking Ġ{ Ċ // ĠĠĠ ĠGlobal Scope . launch Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġ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 ") Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠ Ġrun Blocking Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . Un conf ined ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsum Ġ= Ġ( 1 .. 5 ). as Flow () Ġ. map Ġ{ Ġit Ġ* Ġit Ġ}. reduce Ġ{ Ġa , Ġb Ġ-> Ġa Ġ+ Ġb Ġ} Ġ// Ġæ ± Ĥ åĴĮ ï¼Ī æľ« ç«¯ æĵįä½ľ ç¬¦ ï¼ī Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( sum ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ( 1 .. 3 ). as Flow (). collect Ġ{ Ġvalue Ġ-> Ġprintln ( value ) Ġ} ĊĊĠĠĠ Ġfun Ġproduce Numbers () Ġ= Ġproduce < Long >() Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġ 1 L ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġsend ( x ++) Ġ// Ġinfinite Ġstream Ġof Ġintegers Ġstarting Ġfrom Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsquare ( numbers : ĠReceive Channel < Long >) Ġ= Ġproduce < Long >() Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġnumbers ) Ġsend ( x Ġ* Ġx ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġnumbers Ġ= Ġproduce Numbers () Ġ// Ġproduces Ġintegers Ġfrom Ġ 1 Ġand Ġon ĊĠĠĠ Ġval Ġsquares Ġ= Ġsquare ( numbers ) Ġ// Ġsquares Ġintegers ĊĠĠĠ Ġ// for Ġ( i Ġin Ġ 1 .. 6 ) Ġprintln ( squares . receive ()) ĊĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ( squares . receive ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprintln (" Done !") ĊĠĠĠ Ġsquares . cancel () ĊĠĠĠ Ġnumbers . cancel () Ċ } Ċ Ċ fun Ġsimple (): ĠFlow < Int > Ġ= Ġflow Ġ{ ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. 3 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Emit ting Ġ$ i ") ĊĠĠĠĠĠĠĠ Ġemit ( i ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ suspend Ġfun Ġdo Something Use ful One (): ĠInt Ġ{ ĊĠĠĠ Ġdelay ( 1 0 0 0 L ) ĊĠĠĠ Ġreturn Ġ 1 3 Ċ } Ċ Ċ suspend Ġfun Ġdo Something Use ful Two (): ĠInt Ġ{ ĊĠĠĠ Ġdelay ( 1 0 0 0 L ) ĊĠĠĠ Ġreturn Ġ 2 9 Ċ } ĊĊ