package Ġcor outines Ċ Ċ import Ġkotlinx . coroutines .* ĊĊ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsupervisor Ġ= ĠSuper visor Job () ĊĠĠĠĠĠĠĠ Ġwith ( Coroutine Scope ( coroutine Context Ġ+ Ġsupervisor )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Child Ġ= Ġlaunch ( Coroutine ExceptionHandler Ġ{ Ġ_, Ġ_ Ġ-> Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" The Ġfirst Ġchild Ġis Ġfailing ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠAssertionError (" The Ġfirst Ġchild Ġis Ġcancelled ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecond Child Ġ= Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠC ancellation Ġof Ġthe Ġfirst Ġchild Ġis Ġnot Ġpropag ated Ġto Ġthe Ġsecond Ġchild ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" The Ġfirst Ġchild Ġis Ġcancelled : Ġ${ firstChild . is Cancelled }, Ġbut Ġthe Ġsecond Ġone Ġis Ġstill Ġactive ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" The Ġsecond Ġchild Ġis Ġrunning : Ġ$ isActive ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( Long . MAX _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBut Ġcancellation Ġof Ġthe Ġsupervisor Ġis Ġpropag ated ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" The Ġsecond Ġchild Ġis Ġcancelled Ġbecause Ġthe Ġsupervisor Ġwas Ġcancelled ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// wait Ġuntil Ġfirst Ġchild Ġfails Ġand Ġcompletes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Child . join () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" C ancell ing Ġthe Ġsupervisor ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupervisor . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Child . join () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }