package Ġchapter 9 Ċ Ċ import Ġkotlinx . coroutines . experimental .* Ċ Ċ fun Ġmain ( var arg Ġa : ĠString ) Ġ= Ġrun Blocking Ġ{ ĊĊĠĠ Ġ// take 2 () ĊĠĠĠ Ġ// take 3 () ĊĠĠĠ Ġun conf ined () Ċ } Ċ Ċ private Ġfun Ġun conf ined () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġval Ġr 1 Ġ= Ġasync ( Un conf ined ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( Thread . currentThread (). name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġr 1 . await () Ċ } Ċ Ċ private Ġfun Ġtake 2 () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġval Ġr 1 Ġ= Ġasync Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Thread Ġ= ĠThread . currentThread (). name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( coroutine Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( Thread . currentThread (). name Ġ== Ġparent Thread ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyield () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġr 1 . await () Ċ } Ċ Ċ private Ġfun Ġtake 3 () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġval Ġpool Ġ= Ġnew Fixed ThreadPool Context ( 2 , Ġ" My ĠOwn ĠPool ") ĊĠĠĠ Ġval Ġr 1 Ġ= Ġasync ( pool ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( Thread . currentThread (). name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyield () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġr 1 . await () ĊĠĠĠ Ġpool . close () Ċ }