Size: a a a

2019 October 22

RI

Ruslan Ibragimov in Kotlin Moscow
я сдаюсь
источник

RI

Ruslan Ibragimov in Kotlin Moscow
возьми cfr и декомпильни свой пример
источник

RI

Ruslan Ibragimov in Kotlin Moscow
cfr потому что по моим опытам он наиболее адекватно корутины декомпилит
источник

RI

Ruslan Ibragimov in Kotlin Moscow
Kotlin Coroutines - stackless, loom - stackful. Может так понятнее
источник

VS

Vladimir Sitnikov in Kotlin Moscow
Когда багу починят (возможно даже я починю), тогда поговорим
источник

RI

Ruslan Ibragimov in Kotlin Moscow
Vladimir Sitnikov
Есть:

import kotlinx.coroutines.*

suspend fun test() {
   println("test.begin")
   try {
       delay(5000)
   } catch (e: Throwable) {
       // It is important to throw an exception different from CancellationException
       throw RuntimeException("in test", e)
   }
   println("test.end")
}

suspend fun proxy() {
   try {
       test()
   } catch (e: Throwable) {
       // It is important to throw an exception different from CancellationException
       throw RuntimeException("in proxy", e)
   }
}

fun main() {
   runBlocking {
       withTimeout(100) {
           proxy()
       }
   }
}
Этот пример все равно "полный" стектрейс не напечает
источник

VS

Vladimir Sitnikov in Kotlin Moscow
а мне хоть какой-нибудь стектрейс
источник

VS

Vladimir Sitnikov in Kotlin Moscow
текущий Kotlin вообще не упоминает ни единого бизнес-метода
источник

RI

Ruslan Ibragimov in Kotlin Moscow
Именно в случае cancel. И если и будет, то максимум текущий момент
источник

RI

Ruslan Ibragimov in Kotlin Moscow
Потому что видимо cancel происходит в диспатчере, и код корутины вообще не дернуть оттуда
источник

SM

Sergey Morgunov in Kotlin Moscow
😂👍 Ворвался в обсуждение 😂
источник

VL

Valery Laptev in Kotlin Moscow
Сорян! Промахнулся чатом! 😂
источник

RI

Ruslan Ibragimov in Kotlin Moscow
Я думаю это так, потому что в стейт машине не ожидается вызов с CancellationException, т.е. это так by-design
источник

RI

Ruslan Ibragimov in Kotlin Moscow
источник

RI

Ruslan Ibragimov in Kotlin Moscow
Или решили что не имеет смысл его делать, просто ради того чтобы кинуть-словить exception
источник

RI

Ruslan Ibragimov in Kotlin Moscow
Нужно переносить CancellationException в std-lib, чтобы сделать дешевую поддержку на уровне стейтмашины
источник

VS

Vladimir Sitnikov in Kotlin Moscow
Всё там ожидается. Вот строка, в которой «Kotlin-движок вызывает прикладной код, и передаёт ему TimeoutCancellationException»
источник

RI

Ruslan Ibragimov in Kotlin Moscow
Так это не стейт машина, чтобы получить текущий трейс надо её зарезьюмить с exception
источник

VS

Vladimir Sitnikov in Kotlin Moscow
Код вышеобозначенного $test$2 выглядит так:

public final Object invokeSuspend(@NotNull Object $result) {
       Object object = IntrinsicsKt.getCOROUTINE_SUSPENDED();
       switch (this.label) {
           case 0: {
               ResultKt.throwOnFailure((Object)$result);
               this.label = 1;
               Object object2 = DelayKt.delay((long)5000L, (Continuation)this);
               if (object2 != object) return Unit.INSTANCE;
               return object;
           }
           case 1: {
               ResultKt.throwOnFailure((Object)$result);
               Object object2 = $result;
               return Unit.INSTANCE;
           }
       }
       throw new IllegalStateException("call to 'resume' before 'invoke' with coroutine");
   }


очевидно, что он может не просто сделать throwOnFailure, а в само исключение добавить информацию «ох, мы обнаружили проблему на строке Example.kt:48»
источник

RI

Ruslan Ibragimov in Kotlin Moscow
Да, только это лишний throw-catch
источник