Coroutines
Context
Coroutines have to be run inside a context.
Suspend function
Suspend functions make sense to start only from coroutine (compilation requirements). And some functions (e.g. delay()) are making sense only inside of suspend functions.
Suspend function can be called from
another suspend function
from coroutine (This is the way actually to start a "first" suspend function)
Do not use blocking code (e.g. Thread.sleep()) in coroutine
Testing of suspend function
Builders
Launch
Launch creates a coroutine and submit it to the separate thread, main thread will not wait until the coroutine is finished.
runBlocking
This can be useful to use in tests (to make test a coroutine to be able to invoke suspend function in the test).
Control
Join
Similar to joining a thread. The calling thread blocks until coroutine is finished.
Launch returns Job, which has join method. We can also check is coroutine is finished.
Cancel
In order to be cancellable coroutine should be able to check for cancellation.
E.g. delay()
function knows how to cancel.
It is possible to check the status itself (it did not work on my machine, but I took it from the course)
Last updated