import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġkotlin . system . measure Time Millis Ċ Ċ fun Ġmain () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġprintln (" Running Ġblocking Ġfunction ") ĊĠĠĠ Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Function () ĊĠĠĠ Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Time ĠT aken : Ġ$ it ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln ("\ n Running Ġsus pending Ġfunction ") ĊĠĠĠ Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Sus pending Function () ĊĠĠĠ Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Time Ġtaken : Ġ$ it ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġrun Blocking Function () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġ// ĠStart Ġa Ġcoroutine ĊĠĠĠ Ġlaunch ( coroutine Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" In Ġstart Ġ: Ġ${ get Thread Name () }") ĊĠĠĠĠĠĠĠ ĠThread . sleep ( 2 0 0 ) ĊĠĠĠĠĠĠĠ Ġprintln (" In Ġended Ġ: Ġ${ get Thread Name () }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Out Ġstart : Ġ${ get Thread Name () }") ĊĠĠĠĠĠĠĠ ĠThread . sleep ( 3 0 0 ) ĊĠĠĠĠĠĠĠ Ġprintln (" Out Ġended : Ġ${ get Thread Name () }") ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġrun Sus pending Function () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġ// ĠStart Ġa Ġcoroutine ĊĠĠĠ Ġlaunch ( coroutine Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" In Ġstart Ġ: Ġ${ get Thread Name () }") ĊĠĠĠĠĠĠĠ Ġdelay ( 2 0 0 ) ĊĠĠĠĠĠĠĠ Ġprintln (" In Ġended Ġ: Ġ${ get Thread Name () }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Out Ġstart : Ġ${ get Thread Name () }") ĊĠĠĠĠĠĠĠ Ġdelay ( 3 0 0 ) ĊĠĠĠĠĠĠĠ Ġprintln (" Out Ġended : Ġ${ get Thread Name () }") ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġget Thread Name (): ĠString Ġ= ĠThread . currentThread (). name