Size: a a a

Kotlin Community

2020 April 21

MR

Max Rovkin in Kotlin Community
утекает каким образом? Когда где-то try-catch ошибку ловит и CancellationException дальше не прокидывает?
источник

MR

Max Rovkin in Kotlin Community
Alexander Nozik
Мы же вроде все разобрали. У вас где-то руками отменяется топ левел скоуп.
утекает каким образом? Когда где-то try-catch ошибку ловит и CancellationException дальше не прокидывает?
источник

AN

Alexander Nozik in Kotlin Community
Max Rovkin
утекает каким образом? Когда где-то try-catch ошибку ловит и CancellationException дальше не прокидывает?
Если кто-то отменяет скоуп, у которого нет родительского джоба, то отлавливать отмену просто некому. Надо ставить ему ExceptionHandler и может быть это поможет. Надо посмотреть доку
источник

AN

Alexander Nozik in Kotlin Community
источник

MR

Max Rovkin in Kotlin Community
Alexander Nozik
Если кто-то отменяет скоуп, у которого нет родительского джоба, то отлавливать отмену просто некому. Надо ставить ему ExceptionHandler и может быть это поможет. Надо посмотреть доку
можете привести пример такой ситуации, а то я что-то не догоняю?
источник

MR

Max Rovkin in Kotlin Community
у меня все корутины запускаются либо вот от такого скоупа
CoroutineScope(SupervisorJob() + Dispatchers.Main)
Либо от GlobalScope.
источник

AN

Alexander Nozik in Kotlin Community
Max Rovkin
у меня все корутины запускаются либо вот от такого скоупа
CoroutineScope(SupervisorJob() + Dispatchers.Main)
Либо от GlobalScope.
Так вот вы этот самый CoroutineScope или GlobalScope где-то отменили.
источник

AN

Alexander Nozik in Kotlin Community
На самом деле этот самый SupervisorJob бессмысленный, поскольку у него нет предка. Попробуйте его убрать.
источник

MR

Max Rovkin in Kotlin Community
ну вот такой код не кидает ошибок
private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Default)

fun main() {
   scope.launch { delay(1000) }
   scope.cancel()
   scope.launch { delay(1000) }
}
источник

AN

Alexander Nozik in Kotlin Community
Max Rovkin
ну вот такой код не кидает ошибок
private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Default)

fun main() {
   scope.launch { delay(1000) }
   scope.cancel()
   scope.launch { delay(1000) }
}
Мм.. интересно.
источник

AN

Alexander Nozik in Kotlin Community
Супервайзер таки на это не влияет
источник

AN

Alexander Nozik in Kotlin Community
А отмена GlobalScope кидает другую ошибку. Мы же в прошлый раз, когда обсуждали нашли вроде, как воспроизвести ошибку.
источник

MR

Max Rovkin in Kotlin Community
нет, не нашли. было предположение, что try-catch блоки, должны пробрасывать CancellationException дальше, если ловят их, я прошелся по всем местам и сделал так. но и это не помогло
источник

MR

Max Rovkin in Kotlin Community
Max Rovkin
я уже который день бьюсь с ошибкой
E/AndroidRuntime: FATAL EXCEPTION: EventThread
   Process: com.osome.stage, PID: 24487
   kotlinx.coroutines.JobCancellationException: StandaloneCoroutine was cancelled; job=StandaloneCoroutine{Cancelled}@3f7155f

Но так как она воспроизводится не каждый раз, не могу понять в чем дело.
Есть идеи, как получить больше информации? Я уже все обмазал CoroutineName, но толку от этого никакого.
@relizarov может вы сможете помочь?
источник

AN

Alexander Nozik in Kotlin Community
Max Rovkin
нет, не нашли. было предположение, что try-catch блоки, должны пробрасывать CancellationException дальше, если ловят их, я прошелся по всем местам и сделал так. но и это не помогло
Чего-то не могу воспроизвести. Попробуйте в main ее поймать
источник

MR

Max Rovkin in Kotlin Community
Alexander Nozik
Чего-то не могу воспроизвести. Попробуйте в main ее поймать
у меня нет main метода. это в андроид приложении
источник

AN

Alexander Nozik in Kotlin Community
Max Rovkin
у меня нет main метода. это в андроид приложении
Воспроизвел: https://pl.kotl.in/0VI-arf2O
источник

AN

Alexander Nozik in Kotlin Community
Таки рутовый скоуп на причем наверное
источник

MR

Max Rovkin in Kotlin Community
я в IDE запускаю этот же код, он отрабатывает без ошибок
источник

MR

Max Rovkin in Kotlin Community
а нет, так же
источник