Ответ
В Kotlin Coroutines есть несколько способов переключения диспетчера:
- withContext - основной способ временного переключения:
launch(Dispatchers.Main) {
val result = withContext(Dispatchers.IO) {
// IO операция
}
// Продолжаем в Main
}
- Flow.flowOn - для Flow:
flow { emit(data) }
.flowOn(Dispatchers.IO)
.collect { /* в другом диспетчере */ }
- asFlow/launchIn комбинация:
flow { emit(data) }
.launchIn(CoroutineScope(Dispatchers.IO))
- CoroutineScope с явным диспетчером:
CoroutineScope(Dispatchers.Default).launch {
// код в Default диспетчере
}
Важно: переключение между диспетчерами требует ресурсов, поэтому стоит минимизировать количество переключений.