KOTLIN_BROADCAST Telegram 1655
Не стоит использовать CoroutineScope, отвязанный от приложения

Порой в коде встречается ситуация, когда для запуска корутины в репозитории или каком-либо менеджере разработчики создают CoroutineScope:
class MyRepository(...) {

private val scope = CoroutineScope()

fun doWork(...) {
scope.launch { /* длительная работа */ }
}
}


Но есть вариант хуже:
class MyRepository(...) {

fun doWork(...) {
CoroutineScope(...).launch { /* длительная работа */ }
}
}


0️⃣ CoroutineScope не должен создаваться для запуска только одной корутины. ‼️

1️⃣ При создании CoroutineScope следует добавить Job (или SupervisorJob), а также CoroutineDispatcher, который будет использоваться по умолчанию.

2️⃣ CoroutineScope должен быть связан с каким-либо жизненным циклом объекта. Вся суть scope заключается в том, чтобы отменять операции, когда они больше не нужны. Например, viewModelScope привязан к жизни ViewModel. В Android приложениях я всегда создаю Scope, связанный с Android Application классом, - AppScope. Либо использовать AppScope в классах, где нужен scope, либо сделать scope, который будет связан с другим CoroutineScope приложения.

Создать дочерний Scope можно следующим образом:
fun CoroutineScope.childScope(
context: CoroutineContext = EmptyCoroutineContext
): CoroutineScope {
return CoroutineScope(
coroutineContext
+ SupervisorJob(parent = coroutineContext[Job])
+ context
)
}


3️⃣ Вам точно нужен запуск корутины? Или подойдет suspend функция? Определитесь, почему асинхронный код должен работать независимо от вызывающего его кода и не иметь возможности получения информации об окончании работы через suspend. Также можно возвращать объект Job (хотя это спорная практика, на мой взгляд).

4️⃣ Не используйте GlobalScope. ‼️ Это наследие старых корутин, когда ещё не было structured concurrency.

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

#kotlin #coroutines
Please open Telegram to view this post
VIEW IN TELEGRAM



tgoop.com/kotlin_broadcast/1655
Create:
Last Update:

Не стоит использовать CoroutineScope, отвязанный от приложения

Порой в коде встречается ситуация, когда для запуска корутины в репозитории или каком-либо менеджере разработчики создают CoroutineScope:

class MyRepository(...) {

private val scope = CoroutineScope()

fun doWork(...) {
scope.launch { /* длительная работа */ }
}
}


Но есть вариант хуже:
class MyRepository(...) {

fun doWork(...) {
CoroutineScope(...).launch { /* длительная работа */ }
}
}


0️⃣ CoroutineScope не должен создаваться для запуска только одной корутины. ‼️

1️⃣ При создании CoroutineScope следует добавить Job (или SupervisorJob), а также CoroutineDispatcher, который будет использоваться по умолчанию.

2️⃣ CoroutineScope должен быть связан с каким-либо жизненным циклом объекта. Вся суть scope заключается в том, чтобы отменять операции, когда они больше не нужны. Например, viewModelScope привязан к жизни ViewModel. В Android приложениях я всегда создаю Scope, связанный с Android Application классом, - AppScope. Либо использовать AppScope в классах, где нужен scope, либо сделать scope, который будет связан с другим CoroutineScope приложения.

Создать дочерний Scope можно следующим образом:
fun CoroutineScope.childScope(
context: CoroutineContext = EmptyCoroutineContext
): CoroutineScope {
return CoroutineScope(
coroutineContext
+ SupervisorJob(parent = coroutineContext[Job])
+ context
)
}


3️⃣ Вам точно нужен запуск корутины? Или подойдет suspend функция? Определитесь, почему асинхронный код должен работать независимо от вызывающего его кода и не иметь возможности получения информации об окончании работы через suspend. Также можно возвращать объект Job (хотя это спорная практика, на мой взгляд).

4️⃣ Не используйте GlobalScope. ‼️ Это наследие старых корутин, когда ещё не было structured concurrency.

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

#kotlin #coroutines

BY Kotlin Multiplatform Broadcast


Share with your friend now:
tgoop.com/kotlin_broadcast/1655

View MORE
Open in Telegram


Telegram News

Date: |

The imprisonment came as Telegram said it was "surprised" by claims that privacy commissioner Ada Chung Lai-ling is seeking to block the messaging app due to doxxing content targeting police and politicians. Earlier, crypto enthusiasts had created a self-described “meme app” dubbed “gm” app wherein users would greet each other with “gm” or “good morning” messages. However, in September 2021, the gm app was down after a hacker reportedly gained access to the user data. Joined by Telegram's representative in Brazil, Alan Campos, Perekopsky noted the platform was unable to cater to some of the TSE requests due to the company's operational setup. But Perekopsky added that these requests could be studied for future implementation. Unlimited number of subscribers per channel When choosing the right name for your Telegram channel, use the language of your target audience. The name must sum up the essence of your channel in 1-3 words. If you’re planning to expand your Telegram audience, it makes sense to incorporate keywords into your name.
from us


Telegram Kotlin Multiplatform Broadcast
FROM American