Ответ
Dispatchers.Unconfined работает на текущем потоке до первой точки приостановки (suspend). После возобновления корутина продолжает выполнение в потоке, который вызвал возобновление (например, в UI-потоке, если suspend-функция была вызвана из него).
Пример:
runBlocking {
launch(Dispatchers.Unconfined) {
println("Start in ${Thread.currentThread().name}") // Может быть main или другой
delay(100)
println("After delay in ${Thread.currentThread().name}") // Зависит от потока возобновления
}
}
Используется редко, в основном для тестов или специфичных случаев, где неважен поток выполнения.