Какие знаешь способы переключения CoroutineDispatcher

«Какие знаешь способы переключения CoroutineDispatcher» — вопрос из категории Coroutines и Flow, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Kotlin Coroutines есть несколько способов переключения диспетчера:

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

Важно: переключение между диспетчерами требует ресурсов, поэтому стоит минимизировать количество переключений.