package Ġcom . aj it ma ur ya . basic setup . utility Ċ Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . launch Ċ Ċ abstract Ġclass ĠAsync Task Coroutine < I , ĠO > Ġ{ ĊĠĠĠ Ġvar Ġresult : ĠO ? Ġ= Ġnull ĊĠĠĠ Ġ// private Ġvar Ġresult : ĠO ĊĠĠĠ Ġopen Ġfun Ġon Pre Execute () Ġ{} ĊĊĠĠĠ Ġopen Ġfun Ġon Post Execute ( result : ĠO ?) Ġ{} ĊĠĠĠ Ġabstract Ġfun Ġdo In Background ( var arg Ġparams : ĠI ): ĠO ĊĊĠĠĠ Ġfun Ġ< T > Ġexecute ( var arg Ġinput : ĠI ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Pre Execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall Async (* input ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġcall Async ( var arg Ġinput : ĠI ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . async ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġdo In Background (* input ) ĊĠĠĠĠĠĠĠ Ġ}. await () ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . Main ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Post Execute ( result ) ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }