Я довольно новичок в Kotlin, и я начинаю понимать, как он реализует сопрограммы.Я понимаю, что любая функция, с которой мы, возможно, хотим, чтобы Kotlin работал неблокирующим образом, должна быть помечена suspend
, и что такие функции могут быть выполнены только внутри подпрограммы (или в другой функции приостановки).Пока все хорошо.
Однако я продолжаю сталкиваться с проблемой с функциями утилит, которые принимают другие функции в качестве параметров.Например, с помощью стрелки Try:
suspend fun somethingAsync() = 1 + 1
Try { 1 + 1 } // All is well
Try { somethingAsync() } // Uh oh....
Поскольку параметр функции / оператора вызова Try не аннотирован с помощью suspend, второй вызов будет отклонен компилятором.Как с этим справляются, когда пишут служебные функции, которые не могут знать, требует ли код внутри переданной функции или лямбды приостановки или нет?Написание приостановленной и неподдерживаемой версий каждой такой функции кажется невероятно утомительным.Я пропустил очевидный способ справиться с этой ситуацией?