В чем разница между Main и Default Dispatcher в корутинах

«В чем разница между Main и Default Dispatcher в корутинах» — вопрос из категории Coroutines и Flow, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Main Dispatcher работает в главном потоке (UI-потоке) и используется для операций с UI. Default Dispatcher предназначен для CPU-интенсивных задач и работает в общем пуле потоков.

Пример:

// UI операции
CoroutineScope(Dispatchers.Main).launch {
    updateUi()
}

// Вычисления
CoroutineScope(Dispatchers.Default).launch {
    val result = computeHeavyTask()
    withContext(Dispatchers.Main) {
        showResult(result) // Возвращаемся в Main для UI
    }
}

Main Dispatcher доступен только в Android/UI-приложениях, Default доступен везде. Использование не того диспетчера может привести к ANR (если тяжелые задачи в Main) или исключениям при работе с UI (если UI-операции не в Main).