Добрый день, не подскажите какую -нить статью, где детально описывается как работают suspend функции - во что транслируется код (континуации с конечным автоматом) и как оно работает по шагам.
Я взял простой пример:
class TestKotlin {
companion object {
val instance = TestKotlin()
}
suspend fun doSomething(str: String): String {
return withContext(Dispatchers.Default) {
val s = str + " two"
s
}
}
suspend fun callDoSomething(): String {
val s1 = doSomething("one")
val s2 = doSomething(s1)
return s1+s2
}
}
Далее Tools -> Kotlin -> Show Kotlin Byte code -> Decompile.
Вижу что в сигнатуру суспенд функций добавились континуации, вижу конечный автомат с label , но до конца не понятно как это отработает по шагам.
Нвпример, в коде функиции
public final Object callDoSomething(
@NotNull Continuation $completion) {
...
label22: {
...
case 2:
s1 = (String)((<undefinedtype>)$continuation).L$1;
TestKotlin var7 = (TestKotlin)((<undefinedtype>)$continuation).L$0;
ResultKt.throwOnFailure($result);
var10000 = $result;
break label22;
такое ощущение, что тут происходит зацикливание