Size: a a a

Kotlin Community

2020 March 10

AA

Alidibir Akhbulatov in Kotlin Community
вывод после выполнения:
Start
Job cancel

// после завершения буф-и
End
Сatch CancellationException

а хотелось:
Start
Job cancel
Сatch CancellationException
источник

AT

Alexey Tkachenko in Kotlin Community
А в каких потоках тут что запускается и какие из них останавливаются при Thread.sleep()?
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexey Tkachenko
Люди, я что-то пропустил и корутины при отмене научились прерывать операции чтения из файлов?
Они умеют выполнять что-то при запросе отмены. А что при этом можно сделать для прерывания операции - это уже другой вопрос.
источник

AT

Alexey Tkachenko in Kotlin Community
Vladimir Petrakovich
Они умеют выполнять что-то при запросе отмены. А что при этом можно сделать для прерывания операции - это уже другой вопрос.
Да, некорректно спросил. В общем, всё будет сильно зависеть от того, что в каком потоке запустится
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexey Tkachenko
Да, некорректно спросил. В общем, всё будет сильно зависеть от того, что в каком потоке запустится
Да без разницы, какой поток. Ну разумеется не из того, который заблокирован.
источник

AT

Alexey Tkachenko in Kotlin Community
Логично. И раз у нас чтение запущено в Dispatchers.IO, скорее всего, оно в фоновом потоке, верно? Тогда cancel должен в основном потоке отработать сразу?
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexey Tkachenko
Логично. И раз у нас чтение запущено в Dispatchers.IO, скорее всего, оно в фоновом потоке, верно? Тогда cancel должен в основном потоке отработать сразу?
Да, скорее всего оно запущено в потоке, который можно блокировать, а желание отменить возникнет в каком-то другом (может и из Dispachers.IO тоже), в котором и будет вызван cancel()
источник

AT

Alexey Tkachenko in Kotlin Community
Понятно. Ну, а как там реализована диспетчеризация исключений между потоками, я даже гадать не буду
источник

BP

Bogdan Panchenko in Kotlin Community
Boris Vanin
Это немного нелогично, потому что сумма интов как бы на выходе лонг всё равно должна давать
Не всегда) но да
источник

BP

Bogdan Panchenko in Kotlin Community
Михаил
инлайн классы не могут наследоваться если правильно помню
Только интерфейс
источник

BP

Bogdan Panchenko in Kotlin Community
Ivan Sablin
для этого и делал
Нужно понимать что в этом случае - боксинг, если инлайн классы не работают явно - вам не нужен инлайн класс
источник

BP

Bogdan Panchenko in Kotlin Community
Компилятор подсвечивает инлайн, что он там кричит
источник

BP

Bogdan Panchenko in Kotlin Community
Отменой не решит если у вас блочится поток
источник

BP

Bogdan Panchenko in Kotlin Community
Тут уже нужно смотреть на блокирующий код и смотреть как туда впихнуть delay(1)
источник

OY

Oleg Yukhnevich in Kotlin Community
Bogdan Panchenko
Тут уже нужно смотреть на блокирующий код и смотреть как туда впихнуть delay(1)
delay(1) то зачем?
источник

BP

Bogdan Panchenko in Kotlin Community
Oleg Yukhnevich
delay(1) то зачем?
Что бы была проверка на отмену
источник

BP

Bogdan Panchenko in Kotlin Community
Без саспенд вызова проверки не будет
источник

BP

Bogdan Panchenko in Kotlin Community
Oleg Yukhnevich
delay(1) то зачем?
Если его можно всунуть в блок. код*
источник

AA

Alidibir Akhbulatov in Kotlin Community
Bogdan Panchenko
Тут уже нужно смотреть на блокирующий код и смотреть как туда впихнуть delay(1)
реальный код такой:
val sink = Okio.buffer(Okio.sink(file))
sink.use {
   it.writeAll(source) // здесь долгое выполнение
}
источник

OY

Oleg Yukhnevich in Kotlin Community
источник