package Ġcom . ch ic la im . coroutine Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġkotlinx . android . synt hetic . main . activity _ basic _ coroutine _ layout .* Ċ import Ġkotlinx . coroutines .* Ċ import Ġjava . io . IOException Ċ import Ġjava . lang . Exception Ċ import Ġjava . lang . IllegalArgumentException Ċ Ċ class ĠBasic Coroutine Activity Ġ: ĠBase Activity () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ basic _ coroutine _ layout ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġlaunch ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtext _ content . text Ġ= Ġ" start Ġtask Ġwith Ġlaunch " ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= Ġlaunch ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsleep () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" sleep Ġ 2 Ġseconds Ġby Ġlaunch Ġwith Ġthread : Ġ${ Thread . currentThread (). name }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtext _ content . text Ġ= Ġ" isActive : Ġ${ job . isActive }, Ġis Completed Ġ${ job . is Completed }" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġasync ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtext _ content . text Ġ= Ġ" start Ġtask Ġwith Ġasync " ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeferred Ġ= Ġasync ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsleep () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" the Ġvalue Ġfrom Ġasync Ġwith Ġthread : Ġ${ Thread . currentThread (). name }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdeferred . await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext _ content . text Ġ= Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Context ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtext _ content . text Ġ= Ġ" start Ġtask Ġwith Ġwith Context " ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsleep () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" the Ġvalue Ġfrom Ġwith Context Ġwith Ġthread : Ġ${ Thread . currentThread (). name }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( Thread . currentThread (). name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext _ content . text Ġ= Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsequential ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtext _ content . text Ġ= Ġ" start Ġtasks Ġwith Ġsequential " ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsleep () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" the Ġvalue 1 Ġfrom Ġtask 1 Ġwith Ġthread : Ġ${ Thread . currentThread (). name }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext _ content . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult 2 Ġ= Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsleep () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" the Ġvalue 2 Ġfrom Ġtask 2 Ġwith Ġthread : Ġ${ Thread . currentThread (). name }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext _ content . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( result 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparallel ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtext _ content . text Ġ= Ġ" start Ġtasks Ġwith Ġparallel " ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeferred Ġ= Ġasync ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext _ content . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" start Ġtask 1 ...") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsleep () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" the Ġvalue 1 Ġfrom Ġtask 1 Ġwith Ġthread : Ġ${ Thread . currentThread (). name }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeferred 2 Ġ= Ġasync ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext _ content . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" start Ġtask 2 ...") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsleep () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" the Ġvalue 2 Ġfrom Ġtask 2 Ġwith Ġthread : Ġ${ Thread . currentThread (). name }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext _ content . append ("\ n " Ġ+ Ġdeferred . await () Ġ+ Ġ"\ n " Ġ+ Ġdeferred 2 . await ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ĠApp Ġwill Ġcrash ĊĠĠĠ Ġfun Ġasync Exception ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrun Ġ= Ġasync ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// throw Ġexception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isActive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" result " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrun . await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" result =$ result ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( x : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" catch Ġa Ġexception :$ x ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠApp Ġwould Ġnot Ġcrash ĊĠĠĠ Ġfun Ġasync Exception 2 ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext _ content . text Ġ= Ġ" async Ġwill Ġthrow Ġexception " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupervisor Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrun Ġ= Ġasync ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// throw Ġexception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isActive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" the Ġresult Ġfrom Ġasync " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrun . await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext _ content . append ("\ n Ġ$ result ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( x : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext _ content . append ("\ n catch Ġa Ġexception :$ x ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcancel ( view : ĠView ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġprivate Ġfun Ġsleep ( timeout : ĠLong Ġ= Ġ 2 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠ ĠThread . sleep ( timeout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġcoroutine Context . cancel Children () ĊĠĠĠ Ġ} Ċ }