package Ġchapter 1 . section 5 Ċ Ċ import Ġkotlinx . coroutines . experimental . async Ċ Ċ /** Ċ Ġ* ĠThis Ġfile Ġcontains Ġlogic Ġthat Ġis Ġasynchronous Ċ Ġ* Ġbut Ġcan Ġbe Ġread Ġeasily . Ċ Ġ*/ Ċ Ċ class ĠProfile ( userInfo : ĠUserInfo , Ġcontact Info : ĠContact Info ) Ċ class ĠUserInfo ( name : String , ĠlastName : ĠString ) Ċ class ĠContact Info ( address : ĠString , Ġzip Code : ĠInt ) Ċ Ċ suspend Ġfun Ġget Profile ( id : ĠInt ): ĠProfile Ġ{ ĊĠĠĠ Ġval Ġbasic UserInfo Ġ= Ġasync Get UserInfo ( id ) ĊĠĠĠ Ġval Ġcontact Info Ġ= Ġasync Get Contact Info ( id ) ĊĊĠĠĠ Ġreturn Ġcreate Profile ( basic UserInfo . await (), Ġcontact Info . await ()) Ċ } Ċ Ċ private Ġfun Ġasync Get UserInfo ( id : ĠInt ) Ġ= Ġasync Ġ{ ĊĠĠĠ Ġ// ĠBlock Ġthe Ġthread Ġfor Ġone Ġsecond ĊĠĠĠ Ġ// Ġto Ġsimulate Ġa Ġservice Ġcall ĊĠĠĠ ĠThread . sleep ( 1 0 0 0 ) ĊĊĠĠĠ ĠUserInfo (" Sus an ", Ġ" Cal vin ") Ċ } Ċ Ċ private Ġfun Ġasync Get Contact Info ( id : ĠInt ) Ġ= Ġasync Ġ{ ĊĠĠĠ Ġ// ĠBlock Ġthe Ġthread Ġfor Ġone Ġsecond ĊĠĠĠ Ġ// Ġto Ġsimulate Ġa Ġservice Ġcall ĊĠĠĠ ĠThread . sleep ( 1 0 0 0 ) ĊĠĠĠ ĠContact Info (" False ĠStreet Ġ 1 2 3 ", Ġ 1 1 1 1 1 ) Ċ } Ċ Ċ private Ġfun Ġcreate Profile ( userInfo : ĠUserInfo , Ġcontact Info : ĠContact Info ): ĠProfile Ġ{ ĊĠĠĠ Ġreturn ĠProfile ( userInfo , Ġcontact Info ) Ċ }