Для чего нужно ключевое слово crossinline в inline функции

«Для чего нужно ключевое слово crossinline в inline функции» — вопрос из категории Kotlin, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

crossinline используется в inline функциях для запрета нелокального возврата (return) из лямбды, переданной в такую функцию.

Проблема:
В обычной inline функции return внутри лямбды завершает внешнюю функцию, что может быть неожиданно:

inline fun runInline(block: () -> Unit) {
    block()
}

fun main() {
    runInline { 
        println("Before return")
        return // Неожиданно завершает main()
    }
    println("This won't execute")
}

Решение:
Добавляем crossinline, чтобы запретить return:

inline fun runCrossInline(crossinline block: () -> Unit) {
    block()
}

fun main() {
    runCrossInline { 
        println("Before return")
        // return // Ошибка компиляции: Can't return here
    }
    println("This will execute")
}

Где используется:
Чаще всего в асинхронных вызовах (например, view.post { ... }), где нелокальный return нарушил бы логику.