На каком потоке запускается корутина при запуске unconfined в корутинах

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

Ответ

Unconfined — это диспетчер, который запускает корутину в текущем потоке до первой точки приостановки (suspend). После возобновления корутина выполняется в потоке, который вызвал функцию возобновления.

Пример:

runBlocking {
    launch(Dispatchers.Unconfined) {
        println("Start in ${Thread.currentThread().name}") // Текущий поток (например, main)
        delay(100) // Приостановка
        println("Resumed in ${Thread.currentThread().name}") // Может быть другой поток (например, DefaultDispatcher)
    }
}

⚠️ Не рекомендуется для production-кода из-за непредсказуемости потока после возобновления. Подходит для тестов или специфичных сценариев.