Jobs
The result of running an asynchronous task is referred to as a job. Just as the Thread
object represents an actual OS thread, the Job
object represents an actual coroutine.
For instance, consider the following function that initiates a coroutine to generate a universally unique identifier (UUID) asynchronously and returns it:
fun fastUuidAsync() = GlobalScope.async {
UUID.randomUUID()
}
However, if we execute this code from our main method, it won’t print the expected UUID value. Instead, it will produce a result similar to the following:
> DeferredCoroutine{Active}
The object returned from a coroutine is known as a job. Now, let’s explore what a job is and how to use it correctly.
To illustrate this concept, consider the following code snippet:
fun main() {
runBlocking {
val job: Deferred<UUID> = fastUuidAsync()
println(job.await())
}
}
A job has a simple life cycle and can be in one of...