Dispatchers Running on thread demo - devrath/KotlinAlchemy GitHub Wiki

Observations
Empty co-routine-context
is running on the worker thread.
View-model scope
is running on the main thread.
Default
is running on the worker thread.
IO
is running on the worker thread.
Unconfined
is running on the worker thread because it depends on the enclosing scope currently its Empty co-routine-context
so worker.
Main Dispatcher
is running on the main thread.
Code
class DispatchersDemoVm @Inject constructor( ) : ViewModel() {
// Create a root co-routine scope
private val rootScope = CoroutineScope(EmptyCoroutineContext)
fun demo() {
rootScope.launch() {
println("Empty co-routine-context Executes on thread -> ${Thread.currentThread().name}")
}
viewModelScope.launch {
println("View-model-scope executes onExecutes on thread -> ${Thread.currentThread().name}")
}
viewModelScope.launch(Dispatchers.Main) {
println("View-model-scope + Main, executes onExecutes on thread -> ${Thread.currentThread().name}")
}
viewModelScope.launch(Dispatchers.Default) {
println("View-model-scope + Default, executes onExecutes on thread -> ${Thread.currentThread().name}")
}
viewModelScope.launch(Dispatchers.IO) {
println("View-model-scope + IO, executes onExecutes on thread -> ${Thread.currentThread().name}")
}
rootScope.launch {
viewModelScope.launch(Dispatchers.Unconfined) {
println("View-model-scope + Unconfined, executes onExecutes on thread -> ${Thread.currentThread().name}")
}
}
}
}
Out-put
Empty co-routine-context Executes on thread -> DefaultDispatcher-worker-1
View-model-scope executes onExecutes on thread -> main
View-model-scope + Default, executes onExecutes on thread -> DefaultDispatcher-worker-2
View-model-scope + IO, executes onExecutes on thread -> DefaultDispatcher-worker-1
View-model-scope + Unconfined, executes onExecutes on thread -> DefaultDispatcher-worker-2
View-model-scope + Main, executes onExecutes on thread -> main