Size: a a a

Kotlin Community

2020 August 01

AI

Arkadii Ivanov in Kotlin Community
источник

AI

Arkadii Ivanov in Kotlin Community
isActive там false уже сразу
источник

RI

Ruslan Ibragimov in Kotlin Community
Получает offer таки сделал рандеву и положил таск в очередь - таск видимо это запуск collect
источник

RI

Ruslan Ibragimov in Kotlin Community
источник

RI

Ruslan Ibragimov in Kotlin Community
job.cancel - это еще один таск
источник

RI

Ruslan Ibragimov in Kotlin Community
И собственно первым вызвается как раз collect, т.к. его положили в очередь первее
источник

RI

Ruslan Ibragimov in Kotlin Community
И вторым - cancel
источник

RI

Ruslan Ibragimov in Kotlin Community
Т.е. ошибки тут не вижу, т.к. flow не участвует в structured concurrency вместе с job - то поведение логично
источник

RI

Ruslan Ibragimov in Kotlin Community
если хочется чтобы не было такого - нужно if(job.isActive) использовать
источник

RI

Ruslan Ibragimov in Kotlin Community
Надеюсь понятно обяснил
источник

AI

Arkadii Ivanov in Kotlin Community
Т.е. cancel встаёт в очередь? Это всё объясняет.
источник

RI

Ruslan Ibragimov in Kotlin Community
Нет, cancel выставляется сразу
источник

RI

Ruslan Ibragimov in Kotlin Community
Но во flow нету связи с внешней job
источник

AI

Arkadii Ivanov in Kotlin Community
На всякий случай я добавил issue https://youtrack.jetbrains.com/issue/KT-40762
Но видимо раз такой расклад, пусть закроют тогда смело.
источник

AI

Arkadii Ivanov in Kotlin Community
Ruslan Ibragimov
Т.е. ошибки тут не вижу, т.к. flow не участвует в structured concurrency вместе с job - то поведение логично
Почему так?
источник

RI

Ruslan Ibragimov in Kotlin Community
Потому что у callbackFlow должен быть CoroutineScope ресивером в таком случае
источник

RI

Ruslan Ibragimov in Kotlin Community
А так ничего не связывает его с внешней джобой
источник

RI

Ruslan Ibragimov in Kotlin Community
Ruslan Ibragimov
Потому что у callbackFlow должен быть CoroutineScope ресивером в таком случае
Ну или контекст передаваться, или Job в крайнем случае
источник

AI

Arkadii Ivanov in Kotlin Community
источник

AI

Arkadii Ivanov in Kotlin Community
В этом случае то flow отменяется:
источник