Using coroutines in real life
Microbenchmarks are very funny and they give us an idea of the power of Kotlin coroutines, but they don't represent a real-case scenario.
Let's introduce our real-case scenario:
enum class Gender { MALE, FEMALE; companion object { fun valueOfIgnoreCase(name: String): Gender = valueOf(name.toUpperCase()) } } typealias UserId = Int data class User(val id: UserId, val firstName: String, val lastName: String, val gender: Gender) data class Fact(val id: Int, val value: String, val user: User? = null) interface UserService { fun getFact(id: UserId): Fact }
Our UserService
 interface has just one method—getFact
will return a Chuck Norris-style fact about our user, identified by the user ID.
The implementation should check first on a local database for a user; if the user doesn't exist in the database, it should get it from the RandomUser API service, (https://randomuser.me/documentation), and then store for future use. Once the service has a user...