Size: a a a

Kotlin Community

2020 July 06

AN

Alexander Nozik in Kotlin Community
scope.launch{
 writeAudioToFile()
 callback()
}

скоуп может быть любой
источник

T

The The in Kotlin Community
Alexander Nozik
scope.launch{
 writeAudioToFile()
 callback()
}

скоуп может быть любой
ну вот у меня GlobalScope.launch { }
это не правильно?
источник

AN

Alexander Nozik in Kotlin Community
The The
ну вот у меня GlobalScope.launch { }
это не правильно?
Нормально, если это не внутри другого скоупа делается
источник

T

The The in Kotlin Community
ну выше вы писали что не нужно так делать
источник

AN

Alexander Nozik in Kotlin Community
The The
ну выше вы писали что не нужно так делать
не нужно внутри скоупа запускать глобальный. Да. Где противоречие?
источник

T

The The in Kotlin Community
Переслано от Alexander Nozik
Нет. Как раз потому, что я написал выше. Не понятно, как будут ошибки прокидываться
источник

AN

Alexander Nozik in Kotlin Community
The The
Переслано от Alexander Nozik
Нет. Как раз потому, что я написал выше. Не понятно, как будут ошибки прокидываться
сорри, я не правильно прочитал. Мне показалось, что вопрос был о том, можно ли глобал внутри это крокозябры вызывать
источник

AN

Alexander Nozik in Kotlin Community
Глобал снаружи вполне. Скорее всего тоже не правильно, потому что эта функция не отдельная, а часть какого-то асинхронного кода. Но само по себе нормально.
источник

T

The The in Kotlin Community
хорошо, вроде понял... еще вопрос: нужно ли указывать здесь Dispatchers.IO
источник

T

The The in Kotlin Community
объявление функции выглядит так:
private suspend fun writeAudioToFile() = withContext(Dispatchers.IO)
источник

AN

Alexander Nozik in Kotlin Community
The The
хорошо, вроде понял... еще вопрос: нужно ли указывать здесь Dispatchers.IO
нет, не нужно. Переключение внутри уже будет.
источник

T

The The in Kotlin Community
Alexander Nozik
нет, не нужно. Переключение внутри уже будет.
понял, в общем все оставляю как было
источник

T

The The in Kotlin Community
Alexander Nozik
нет, не нужно. Переключение внутри уже будет.
а FileOutputStream use кстати все равно надо в try-catch оборачивать пишут
источник

AN

Alexander Nozik in Kotlin Community
The The
а FileOutputStream use кстати все равно надо в try-catch оборачивать пишут
Ну если у вас может быть ошибка на открытие файла, в принципе да.
источник

T

The The in Kotlin Community
>is not safe. Reading and closing the reader can both throw IOExceptions, which are not RuntimeExceptions (caused by programming errors). That means leaving them uncaught exposes your app to crashing from things outside your control.
источник

AN

Alexander Nozik in Kotlin Community
The The
>is not safe. Reading and closing the reader can both throw IOExceptions, which are not RuntimeExceptions (caused by programming errors). That means leaving them uncaught exposes your app to crashing from things outside your control.
Но я бы сказал, что обработку надо делать снаружи, а не внутри. Но это уже зависит от того, что за обработка
источник

I

Igor in Kotlin Community
Это кстати выглядит, как костыль, из-за выбранного в котлин дефолта, что все отменяемо по умолчанию.
(в каком-нибудь с# нужно всегда явно передавать токен на отмену и проверять его).

Cамое печальное, что я знаю людей которые пару лет пишут на котлин и не знают про него.
А потом в проде иногда ошибки их-за того что функция оборвалась на середине и стейт стал не консистентный.

Потому что раньше этот код был синхронный и всегда до конца выполнялся и люди продолжают так мыслить.
источник

T

The The in Kotlin Community
Alexander Nozik
Ну если у вас может быть ошибка на открытие файла, в принципе да.
ошибка может быть всегда, на то функция и throwable
источник

VP

Vladimir Petrakovich in Kotlin Community
Igor
Это кстати выглядит, как костыль, из-за выбранного в котлин дефолта, что все отменяемо по умолчанию.
(в каком-нибудь с# нужно всегда явно передавать токен на отмену и проверять его).

Cамое печальное, что я знаю людей которые пару лет пишут на котлин и не знают про него.
А потом в проде иногда ошибки их-за того что функция оборвалась на середине и стейт стал не консистентный.

Потому что раньше этот код был синхронный и всегда до конца выполнялся и люди продолжают так мыслить.
Как будто таскать повсюду CancellationToken лучше. Вполне норм дефолт.
источник

AP

Anton Potekhin in Kotlin Community
Господа знатоки:

val ids: List<Int>
val transform: Flow<Any> = ids.asFlow().transform<Int, Result> { id ->
   
val result = remote.makeRequest(id)
   
emit(result)
}

вот так получается последовательно посылается запрос для каждого id из списка ids. А как красивей сделать чтобы запросы посылались параллельно ?
источник