package Ġio . gitlab . art urb os ch . de te kt . core Ċ Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ import Ġjava . util . concurrent . Executor Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . function . Supplier Ċ Ċ /** Ċ Ġ* Ġ@ author ĠArt ur ĠB os ch Ċ Ġ*/ Ċ Ċ fun Ġ< T > Ġwith Executor ( block : ĠExecutor . () Ġ-> ĠT ): ĠT Ġ{ Ċ ĉ val Ġexecutor Ġ= ĠExec utors . new Fixed ThreadPool ( Runtime . get Runtime (). available Processors ()) Ċ ĉ return Ġblock . invoke ( executor ). apply Ġ{ Ċĉ ĉ executor . shutdown () Ċ ĉ } Ċ } Ċ Ċ fun Ġ< T > ĠExecutor . run Async ( block : Ġ() Ġ-> ĠT ): ĠCompletableFuture < T > Ġ{ Ċ ĉ return Ġtask ( this ) Ġ{ Ġblock () Ġ} Ċ } Ċ Ċ fun Ġ< T > Ġtask ( executor : ĠExecutor , Ġtask : Ġ() Ġ-> ĠT ): ĠCompletableFuture < T > Ġ{ Ċ ĉ return ĠCompletableFuture . supply Async ( Supplier Ġ{ Ġtask () Ġ}, Ġexecutor ) Ċ } Ċ Ċ fun Ġ< T > Ġawait All ( futures : ĠList < Comp letableFuture < T >>) Ġ= Ġfutures . map Ġ{ Ġit . join () Ġ} Ċ