There are two ways to define asynchronous functions in Kotlin:
* using the modifier `suspend` in the function declaration
* creating an extension function on `CoroutineScope` (or passing it as a parameter)
The `suspend` modifier is generally used for functions that might take some time to complete. The caller coroutine might be potentially suspended.
Functions that return results immediately but start a coroutine in the background should be written as extension functions on `CoroutineScope`. At the same time, these functions should not be declared `suspend`, as suspending functions should not leave running background tasks behind.