package Ġapp . api Ċ Ċ import ĠBlock ing Response Ċ import Ġapp . Dependency Factory Ċ import Ġbusiness . entity . Io Task Ċ import Ġbusiness . service . Io Bound UseCase Ċ import Ġio . ktor . application .* Ċ import Ġio . ktor . features .* Ċ import Ġio . ktor . response .* Ċ import Ġio . ktor . routing .* Ċ import Ġkotlinx . coroutines .* Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . util .* Ċ import Ġjava . util . function . Function Ċ Ċ private Ġval Ġlog Ġ= ĠLoggerFactory . getLogger (" app . Io Handler ") Ċ Ċ internal Ġfun ĠRouting . io Handler () Ġ{ ĊĊĠĠĠ Ġval Ġio Bound UseCase : ĠIo Bound UseCase Ġ= ĠDependency Factory . io Bound UseCase () ĊĊĠĠĠ Ġget ("/ io ") Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġduration Param Ġ= Ġthis . context . request . query Parameters [" duration "] ĊĠĠĠĠĠĠĠ Ġval Ġduration : ĠLong Ġ= Ġif Ġ( duration Param . isNull Or Blank ()) Ġ 1 0 0 0 Ġelse Ġduration Param . to Long () ĊĠĠĠĠĠĠĠ Ġif Ġ( duration Ġ< Ġ 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠBadRequest Exception (" Duration Ġshould Ġbe Ġpositive Ġnumber !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" IO Ġtask Ġwith Ġsus pended Ġcoroutine , Ġduration : Ġ{}", Ġduration ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠUUID . randomUUID () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Ġ= ĠIo Task . Builder ( id , Ġnon Blocking Async Behaviour ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. duration ( duration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġio Bound UseCase . run ( task ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( Blocking Response ( result . await ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ val Ġnon Blocking Async Behaviour Ġ= ĠFunction < Long , ĠDeferred < Boolean >> Ġ{ ĊĠĠĠ ĠGlobal Scope . async Ġ{ ĊĠĠĠĠĠĠĠ Ġdelay ( it ) ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠ Ġ} Ċ }