package Ġselect . on aw await Ċ Ċ import Ġjavafx . application . Application . launch Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . channels .* Ċ import Ġkotlinx . coroutines . select s . select Ċ import Ġkotlinx . coroutines . select s . select Un bi ased Ċ import Ġkotlin . random . Random Ċ Ċ fun ĠCor outine Scope . async String ( time : ĠInt , Ġnumber : ĠInt ) Ġ= Ġasync Ġ{ ĊĠĠĠ Ġdelay ( time . to Long ()) ĊĠĠĠ Ġ"$ number Ġwait ed Ġfor Ġ$ time Ġms " Ċ } Ċ Ċ fun ĠCor outine Scope . async Strings List (): ĠMutable List < Deferred < String >> Ġ{ ĊĠĠĠ Ġval Ġrandom Ġ= ĠRandom ( System . currentTimeMillis ()) ĊĠĠĠ Ġreturn ĠMutable List ( 1 2 ) Ġ{ Ġasync String ( random . nextInt ( 1 0 0 0 ), Ġit ) Ġ} Ċ } Ċ Ċ fun Ġmain () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġval Ġlist Ġ= Ġasync Strings List () ĊĠĠĠ Ġvar Ġcount Active Ġ= Ġlist . count Ġ{ Ġit . isActive Ġ} ĊĠĠĠ Ġwhile ( count Active Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġselect < Pair < Int , ĠString >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . with Index (). forEach Ġ{ Ġ( index , Ġdeferred ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeferred . on Await Ġ{ Ġanswer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġto Ġ" Deferred Ġproduced Ġanswer Ġ'$ answer '" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln ( result . second ) ĊĠĠĠĠĠĠĠ Ġlist . remove At ( result . first ) ĊĠĠĠĠĠĠĠ Ġcount Active Ġ= Ġlist . count Ġ{ Ġit . isActive Ġ} ĊĠĠĠĠĠĠĠ Ġprintln ("$ count Active Ġcor outines Ġare Ġstill Ġactive ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġprintln (" Done ") Ċ } Ċ