Size: a a a

Kotlin Community

2020 January 28

U

Unat in Kotlin Community
Это диспатчер, он не помирает, а просто выбирает на каком пуле вращать твой блокирующий вызов
источник

U

Unat in Kotlin Community
Можешь пошерстить либу корутин, там очень редко передаётся скоуп в качестве аргумента
источник

VP

Vladimir Petrakovich in Kotlin Community
Unat
У него там Scope.async'ки предполагались, так что так и задумано
Зачем тогда вообще корутины? 🤷‍♂️
источник

U

Unat in Kotlin Community
Vladimir Petrakovich
Зачем тогда вообще корутины? 🤷‍♂️
Да я вот тоже посмотрел сейчас и не понял
источник

QH

Quantum Harmonizer in Kotlin Community
Unat
Можешь пошерстить либу корутин, там очень редко передаётся скоуп в качестве аргумента
хмм, но как же cancellation propagation?
источник

U

Unat in Kotlin Community
Quantum Harmonizer
хмм, но как же cancellation propagation?
с блокирующим вызовом?
источник

QH

Quantum Harmonizer in Kotlin Community
Unat
с блокирующим вызовом?
справедливо 😢
источник

U

Unat in Kotlin Community
ха, никак. Это не треды, они не помрут.
источник

U

Unat in Kotlin Community
Впрочем, в случае "отмены", результат из withContext'а не вернется
источник

QH

Quantum Harmonizer in Kotlin Community
Unat
Это диспатчер, он не помирает, а просто выбирает на каком пуле вращать твой блокирующий вызов
А можешь подсказать, куда читать, чтобы осознать эту угрозу?
источник

VP

Vladimir Petrakovich in Kotlin Community
Нельзя взять и сделать функцию suspend в зависимости от параметра. Тут только играться с inline, делать две разных функции, или делать .await() в итоге
источник

U

Unat in Kotlin Community
Quantum Harmonizer
А можешь подсказать, куда читать, чтобы осознать эту угрозу?
Да я как-то через шишки ознакомился
источник

QH

Quantum Harmonizer in Kotlin Community
Vladimir Petrakovich
Нельзя взять и сделать функцию suspend в зависимости от параметра. Тут только играться с inline, делать две разных функции, или делать .await() в итоге
да, про это я спросил 100500 сообщений назад и получил ответ — Deferred
источник

QH

Quantum Harmonizer in Kotlin Community
Unat
Да я как-то через шишки ознакомился
а есть пример кода, который работает неправильно?
источник

VP

Vladimir Petrakovich in Kotlin Community
Quantum Harmonizer
да, про это я спросил 100500 сообщений назад и получил ответ — Deferred
Если возвращать Deferred, то у него придётся не забывать делать await().
Это ни разу не удобно
источник

QH

Quantum Harmonizer in Kotlin Community
Vladimir Petrakovich
Если возвращать Deferred, то у него придётся не забывать делать await().
Это ни разу не удобно
да, поэтому, в соответствии с советами выше, будут экстеншены, которые делают его сами
источник

U

Unat in Kotlin Community
Quantum Harmonizer
а есть пример кода, который работает неправильно?
У меня был актор с двумя методами - start() и stop(), первый раз я сделал fun start(){ scope.launch { while(isActive) { ... } } } и fun stop() { supervisorJob.cancel() }, чем и насрал себе в штаны
источник

VP

Vladimir Petrakovich in Kotlin Community
Quantum Harmonizer
да, поэтому, в соответствии с советами выше, будут экстеншены, которые делают его сами
Тогда проблема решена. Зачем что-то ещё?
источник

QH

Quantum Harmonizer in Kotlin Community
Vladimir Petrakovich
Тогда проблема решена. Зачем что-то ещё?
моя проблема была с передачей скоупа/контекста
источник

U

Unat in Kotlin Community
потому что supervisorJob.cancel() убил весь скоуп насовсем. Исправил через supervisorJob.cancelChildren() - это убивает только корутины внутри скоупа, но сам скоуп можно продолжать использовать.
источник