IS
Size: a a a
IS
AN
IS

AN
IS
AN
IS
IS
AN
IS
AN
IS
IS
КР
inline fun <T> Flow<T>.collectLifecycle(lifecycleOwner: LifecycleOwner, crossinline block: (T) -> Unit) {
lifecycleOwner.lifecycleScope.launchWhenStarted {
collect { block.invoke(it) }
}
}
Коллектинг флоу суспендится, если будет onStop, и когда пользователь вернётся - коллектинг зарезьюмится. Проблема в том, что если в этом промежутке было много новых ивентов, то они вывалятся пачкой, а мне надо взять только последнее. Добавление conflate() не помогает, помогло debounce(10), но это не подходящее решение, надо без дебаунса. Есть идеи?I
inline fun <T> Flow<T>.collectLifecycle(lifecycleOwner: LifecycleOwner, crossinline block: (T) -> Unit) {
lifecycleOwner.lifecycleScope.launchWhenStarted {
collect { block.invoke(it) }
}
}
Коллектинг флоу суспендится, если будет onStop, и когда пользователь вернётся - коллектинг зарезьюмится. Проблема в том, что если в этом промежутке было много новых ивентов, то они вывалятся пачкой, а мне надо взять только последнее. Добавление conflate() не помогает, помогло debounce(10), но это не подходящее решение, надо без дебаунса. Есть идеи?КР
I
КР
EP
Mutex для блокировки, Но в документации нашел пример на акторах. Есть ли способ шарить актор между разными методами? Пример, как тут правильно реализовать функцию sendMessageEP
class UserDao {
// in-memory cache of the user object
var user: User = User("", "")
private set
suspend fun getUser(): User {
val response = CompletableDeferred<User>()
sendMessage(UserMsg.GetUser(response))
return response.await()
}
suspend fun setUser(user: User) {
sendMessage(UserMsg.SetUser(user))
}
private suspend fun sendMessage(msg: UserMsg) {
when (msg) {
is UserMsg.SetUser -> user = msg.user
is UserMsg.GetUser -> msg.response.complete(user)
}
}
sealed class UserMsg {
class SetUser(val user: User) : UserMsg() // one-way message to set user
class GetUser(val response: CompletableDeferred<User>) : UserMsg() // a request with reply
}
}