Size: a a a

Kotlin Community

2020 August 13

АЕ

Алексей Ершов... in Kotlin Community
просто андроидный viewModelScope) Если вы не за андроид, найду ссылку
источник

АО

Алексей Овсянников... in Kotlin Community
Алексей Ершов
просто андроидный viewModelScope) Если вы не за андроид, найду ссылку
ну только SupervisorJob добавлять в контекст, я думаю
источник

АЕ

Алексей Ершов... in Kotlin Community
этот скоуп и так с этой джобой
источник

АЕ

Алексей Ершов... in Kotlin Community
источник

АО

Алексей Овсянников... in Kotlin Community
Ну я всё же попробовал бы дополнительно в supervisorScope вызов обернуть
источник

АО

Алексей Овсянников... in Kotlin Community
хотя бы ради галочку
источник

КР

Кирилл Романенко... in Kotlin Community
Полная ошибка вот
JobCancellationException: Job was cancelled; job=SupervisorJobImpl{Cancelled}@4d7d025

Я вызываю viewModelScope.launch.
источник

АО

Алексей Овсянников... in Kotlin Community
попробуйте

viewModelScope.launch {
   try {
       supervisorScope { ... }
   } catch (e: JobCancellationException){}
}
источник

КР

Кирилл Романенко... in Kotlin Community
Алексей Овсянников
попробуйте

viewModelScope.launch {
   try {
       supervisorScope { ... }
   } catch (e: JobCancellationException){}
}
Так этого экзепшена нет в свободном доступе. :)
источник

АО

Алексей Овсянников... in Kotlin Community
Кирилл Романенко
Так этого экзепшена нет в свободном доступе. :)
CancellationException
источник

VP

Vladimir Petrakovich in Kotlin Community
Кирилл Романенко
Полная ошибка вот
JobCancellationException: Job was cancelled; job=SupervisorJobImpl{Cancelled}@4d7d025

Я вызываю viewModelScope.launch.
Так это значит саму SupervisorJob отменили
источник

АЕ

Алексей Ершов... in Kotlin Community
Да, так и есть, ViewModelScope закрыли. А зачем ему наружу выстреливать исключение?
источник

VP

Vladimir Petrakovich in Kotlin Community
Алексей Ершов
Да, так и есть, ViewModelScope закрыли. А зачем ему наружу выстреливать исключение?
Объект сам по себе исключениями не стреляет :)
Стреляют обычно блоки кода вроде такого: supervisorScope { }. Но тут, я так понял, scope создаётся руками.
Можно попробовать отловить в отладчике выброс этого исключения.
источник

АЕ

Алексей Ершов... in Kotlin Community
Это ж корутины, там стектрейсов пока нет(
источник

VP

Vladimir Petrakovich in Kotlin Community
Алексей Ершов
Это ж корутины, там стектрейсов пока нет(
Ну в самом исключении стек-трейса нет, но если поймать его выброс в отладчике, всё там будет
источник

АЕ

Алексей Ершов... in Kotlin Community
я не смог воспроизвести, но синтетических примеров не писал, да, буду пробовать
источник

AN

Alexander Nozik in Kotlin Community
У меня эта проблема возникла при использовании кастомного колбэка. Там чего-то как-то не так заворачивается и исключение выкидывается наверх скоупа. Решение - поползать с лупой по всем суспенд вызовам, найти, где оно выкинулось и обернуть это место в try/catch.
источник

VP

Vladimir Petrakovich in Kotlin Community
Наверное, надо читать в доке от этого androidx, как этим надо пользоваться, чтобы отмена не считалась фатальным исключением.
источник

AN

Alexander Nozik in Kotlin Community
Там проблема возникает, если где-то в цепочке вызовов нарушается structured concurrency. Я не совсем понял механику, но тоже дня два бился с этим.
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexander Nozik
Там проблема возникает, если где-то в цепочке вызовов нарушается structured concurrency. Я не совсем понял механику, но тоже дня два бился с этим.
Ну там наверху scope, созданный руками, так что наверное тот самый случай и исключения летят в UncaughtExceptionHandler. Но отмена вроде должна игнорироваться.
источник