Size: a a a

Kotlin Community

2020 April 17

AN

Alexander Nozik in Kotlin Community
А чего, можно в by блок выражения запихивать? Так можно было?
источник

MR

Max Rovkin in Kotlin Community
это  делегаты
источник

MR

Max Rovkin in Kotlin Community
в общем вот что меня конфьюзит
https://pl.kotl.in/Yvc5F-JMK
источник

AN

Alexander Nozik in Kotlin Community
Я знаю, что делегаты. Я не знал, что туда произвольное выражение можно пихать. Проверил, можно: https://pl.kotl.in/brAHAfhUz. Век живи, век учись.
источник

MR

Max Rovkin in Kotlin Community
private val parentScope = CoroutineScope(SupervisorJob() + Dispatchers.Default)
private val scope = CoroutineScope(parentScope.coroutineContext + SupervisorJob())
private val scope2 = CoroutineScope(SupervisorJob()+ parentScope.coroutineContext)

   scope.cancel()  - не отменяет родительский скоуп, а     scope2.cancel() - отменяет родительский скоуп
источник

AN

Alexander Nozik in Kotlin Community
Max Rovkin
private val parentScope = CoroutineScope(SupervisorJob() + Dispatchers.Default)
private val scope = CoroutineScope(parentScope.coroutineContext + SupervisorJob())
private val scope2 = CoroutineScope(SupervisorJob()+ parentScope.coroutineContext)

   scope.cancel()  - не отменяет родительский скоуп, а     scope2.cancel() - отменяет родительский скоуп
вы предка не указываете
источник

MR

Max Rovkin in Kotlin Community
как его указать?
источник

AN

Alexander Nozik in Kotlin Community
щас. Давно этого не делал
источник

AN

Alexander Nozik in Kotlin Community
Max Rovkin
как его указать?
https://pl.kotl.in/EFThbjzIF порядок в сумме важен, поскольку надо чтобы старый джоб подменился новым. Не совсем тривиально, но это плата за ручную манипуляцию скоупами
источник

MR

Max Rovkin in Kotlin Community
ну вот да, я предполагал, что сумма коммутативна 🙁
источник

MR

Max Rovkin in Kotlin Community
теперь все встало на свои места. а то у меня разрыв шаблона был 😄
источник

AN

Alexander Nozik in Kotlin Community
Max Rovkin
ну вот да, я предполагал, что сумма коммутативна 🙁
Нет, там сумма в смысле карт работает, то что справа заменяет элемент в том, что слева.
источник

MR

Max Rovkin in Kotlin Community
спасибо 🙂
источник

AN

Alexander Nozik in Kotlin Community
Там просто джоб и справа и слева есть, выигрывает тот, что слева. Не супер очевидно.
источник

AN

Alexander Nozik in Kotlin Community
Вот демка отмены наследников: https://pl.kotl.in/_ttPd0aXZ
источник

MR

Max Rovkin in Kotlin Community
да дальше то все понятно, я когда накидывал пример, понял, что сумма не коммутативна
источник

AN

Alexander Nozik in Kotlin Community
Но мне болше всего нравится пример из доки. Надо кстати мой код подчистить на эту тему. Львиная доля писалась еще на 1.1
источник

AN

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

MR

Max Rovkin in Kotlin Community
а кроме, как инорирование CancellationException есть еще причины, почему может происходить такая ошибка?
E/EventThread: Task threw exception
   kotlinx.coroutines.JobCancellationException: StandaloneCoroutine was cancelled; job=StandaloneCoroutine{Cancelled}@5f87fa1


А то я по всему проекту поиском пробежался и везде, где используется try-catch внутри корутин добавил
catch (e: CancellationException) {
   throw e
}
Но это не помогло.
источник

VP

Vladimir Petrakovich in Kotlin Community
Max Rovkin
а кроме, как инорирование CancellationException есть еще причины, почему может происходить такая ошибка?
E/EventThread: Task threw exception
   kotlinx.coroutines.JobCancellationException: StandaloneCoroutine was cancelled; job=StandaloneCoroutine{Cancelled}@5f87fa1


А то я по всему проекту поиском пробежался и везде, где используется try-catch внутри корутин добавил
catch (e: CancellationException) {
   throw e
}
Но это не помогло.
Легко, например:
coroutineScope {
   cancel()
}
источник