Making asynchronicity explicit
As you saw in the previous chapter, it is very easy to create an asynchronous function in Kotlin. Here is an example:
fun CoroutineScope.getResult() = async { delay(100) "OK" }
However, this asynchronicity may be an unexpected behavior for the user of the function, as they may expect a simple value.
What do you think the following code prints?
println("${getResult()}")
For the user, the preceding code somewhat unexpectedly prints the following instead of "OK"
:
> Name: DeferredCoroutine{Active}@...
Of course, if you have read Chapter 6, Threads and Coroutines, you will know that what's missing here is the await()
function:
println("${getResult().await()}")
But it would have been a lot more obvious if we'd named our function accordingly, by adding an async
suffix:
fun CoroutineScope.getResultAsync() = async { delay...