Как известно, suspend функцию нельзя напрямую вызв...
# russian
b
Как известно, suspend функцию нельзя напрямую вызвать из обычной. Но ведь всё-таки это происходит, так как например runBlocking - обычная функция. Где начинается магия?
m
runBlocking принимает suspend-функцию и вызывает на ней хитрые экстеншены, которые позволяют её выполнять до ближайшей suspension point
b
Ну интересно найти какая именно функция первой нарушает правила
g
susepndCoroutine
Это самый примитивный корутин билдер, именно он часть языка и stdlib
b
suspendCoroutine объявлена сама как suspend
m
Нет нарушений правил, есть
(suspend () -> R).createCoroutine()
g
Да, пардон, не suspend, а create (и start)
Ну она сама не нарушает, но все остальные билдеры в итоге приходят к ней и собственно suspend лямбда и преобразуется компилятором