Size: a a a

Kotlin Community

2020 April 17

AN

Alexander Nozik in Kotlin Community
Вот можно поиграться: https://pl.kotl.in/LsFSwSGVS
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexander Nozik
Факт. как раз скоуп это гарантирует. Единственное исключение - это если вы его руками перехватили и куда-то мимо скоупа переправили
Если например на верхнем уровне suspend main(), никакого родительского скоупа не будет
источник

AN

Alexander Nozik in Kotlin Community
Vladimir Petrakovich
Если например на верхнем уровне suspend main(), никакого родительского скоупа не будет
вот именно в этом случае да, только что показал.
источник

VP

Vladimir Petrakovich in Kotlin Community
Я к тому, что исключение не обрабатывается в пользовательском коде. Понятно, что где-то его поймают. Но приложение работать уже не будет.
источник

AN

Alexander Nozik in Kotlin Community
Если GlobalScope.launch, то проблемы уже нет
источник

AN

Alexander Nozik in Kotlin Community
Vladimir Petrakovich
Я к тому, что исключение не обрабатывается в пользовательском коде. Понятно, что где-то его поймают. Но приложение работать уже не будет.
Получается, что suspend.main - единственный способ это словить. Ну или сборка топ левел скоупа руками
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexander Nozik
Получается, что suspend.main - единственный способ это словить. Ну или сборка топ левел скоупа руками
... что используется в андроиде постоянно
источник

AN

Alexander Nozik in Kotlin Community
Vladimir Petrakovich
... что используется в андроиде постоянно
Ну так тогда надо интерсептор задать при генерации скоупа или руками отмену ловить. Вообще, по-моему тот пример, что в доке приведен от этого спасает
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexander Nozik
Ну так тогда надо интерсептор задать при генерации скоупа или руками отмену ловить. Вообще, по-моему тот пример, что в доке приведен от этого спасает
А что там делать в этом интерсепторе? В коде вылетело исключение, которое никто не ожидал. Ваши действия?
источник

AN

Alexander Nozik in Kotlin Community
Vladimir Petrakovich
А что там делать в этом интерсепторе? В коде вылетело исключение, которое никто не ожидал. Ваши действия?
Все остальные исключения надо прокинуть. Конкретно Cancellation должен быть тихо отловлен и не прокинуться вверх по стеку
источник

AN

Alexander Nozik in Kotlin Community
Вообще, надо не страдать ерундой и наследовать нормально скоупы от глобального
источник

VP

Vladimir Petrakovich in Kotlin Community
Vladimir Petrakovich
Это лишь пример. Вылет исключения в дочерней корутине приведёт к тому же эффекту.
Вот тут я, кажется, неправ. Вылетит исходное исключение.
источник

MR

Max Rovkin in Kotlin Community
А мне то чё искать :)
источник

MR

Max Rovkin in Kotlin Community
Можете подсказать?
источник

AN

Alexander Nozik in Kotlin Community
Max Rovkin
Можете подсказать?
Можно попробовать добавить https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-coroutine-exception-handler/index.html в верхний контекст. Но вообще, я не совсем понял, как оно у вас наверх-то вылетает. Это может быть только если верхний джоб у вас не супервайзер. Как топовый скоуп создается?
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexander Nozik
Можно попробовать добавить https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-coroutine-exception-handler/index.html в верхний контекст. Но вообще, я не совсем понял, как оно у вас наверх-то вылетает. Это может быть только если верхний джоб у вас не супервайзер. Как топовый скоуп создается?
Если его добавить, там поймается это самое CancellationException без стектрейса 😄
источник

MR

Max Rovkin in Kotlin Community
Alexander Nozik
Можно попробовать добавить https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-coroutine-exception-handler/index.html в верхний контекст. Но вообще, я не совсем понял, как оно у вас наверх-то вылетает. Это может быть только если верхний джоб у вас не супервайзер. Как топовый скоуп создается?
Как я в примерах кидал, так и создаётся
источник

MR

Max Rovkin in Kotlin Community
Там супервизор джоб используется
источник

AN

Alexander Nozik in Kotlin Community
Vladimir Petrakovich
Если его добавить, там поймается это самое CancellationException без стектрейса 😄
Так и нормально, его просто надо игнорить
источник

MR

Max Rovkin in Kotlin Community
CoroutineScope(SupervisorJob() + Dispatchers.Main)
источник