Size: a a a

Kotlin Community

2020 August 01

RI

Ruslan Ibragimov in Kotlin Community
Потому что корутина отменилась
источник

AI

Arkadii Ivanov in Kotlin Community
Так и там она отменилась?
источник

RI

Ruslan Ibragimov in Kotlin Community
Да, но т.к. нету кооперативной отмены - все что попало в event-loop до окончательной отмены будет выполнено
источник

RI

Ruslan Ibragimov in Kotlin Community
В отличии от двух вложенных джоб например
источник

AI

Arkadii Ivanov in Kotlin Community
Ruslan Ibragimov
Да, но т.к. нету кооперативной отмены - все что попало в event-loop до окончательной отмены будет выполнено
Во, а что такое окончательная отмена?
источник

RI

Ruslan Ibragimov in Kotlin Community
На классе Job кажется есть диаграма состояния
источник

RI

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

RI

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

RI

Ruslan Ibragimov in Kotlin Community
В момент когда collect вызвается видимо transient state
источник

AI

Arkadii Ivanov in Kotlin Community
Т.е. это нормально, что запланированные задачи продолжают выполняться?
источник

RI

Ruslan Ibragimov in Kotlin Community
Job cancelled in collect: true
Job active in collect: false
Job completed in collect: false
источник

AI

Arkadii Ivanov in Kotlin Community
Ну понятно что не completed, раз collect выполняется. Просто факт продолжения выполнения задач после отмены для меня удивителен.
источник

RI

Ruslan Ibragimov in Kotlin Community
Отменен то не flow был
источник

AI

Arkadii Ivanov in Kotlin Community
Ruslan Ibragimov
Отменен то не flow был
Отменён job, в котором вызывается suspend collect
источник

AI

Arkadii Ivanov in Kotlin Community
callbackFlow это обычный Flow ведь, у которого обычный fun suspend collect(item). Этот метод просто вызывается в GlobalScope.lunch(...) {}
источник

AI

Arkadii Ivanov in Kotlin Community
В общем огромное спасибо за дебаг и погружение в проблему. ПОсмотрю, что в тикете напишут.
источник

RI

Ruslan Ibragimov in Kotlin Community
Arkadii Ivanov
callbackFlow это обычный Flow ведь, у которого обычный fun suspend collect(item). Этот метод просто вызывается в GlobalScope.lunch(...) {}
Да, и это значит что block который передавался в launch не будет больше резьюмиться, но на внутренности flow никак не влияет, т.к. flow не получает никак Job и не знает что происходит вокруг
источник

AI

Arkadii Ivanov in Kotlin Community
Ruslan Ibragimov
Да, и это значит что block который передавался в launch не будет больше резьюмиться, но на внутренности flow никак не влияет, т.к. flow не получает никак Job и не знает что происходит вокруг
Я и не ожидаю, что на внутренности callbackFlow должно влиять. Но я ожидаю, что suspend fun collect{} не должен просыпаться, если его скоуп отменён.
источник

RI

Ruslan Ibragimov in Kotlin Community
У него нету связи со скоупом
источник

AI

Arkadii Ivanov in Kotlin Community
Как это? А structured concurrency?
источник