ursus
01/05/2022, 4:54 AMgildor
01/05/2022, 8:30 AMJavier
01/05/2022, 9:00 AMgildor
01/05/2022, 9:01 AMJavier
01/05/2022, 9:02 AMgildor
01/05/2022, 9:02 AMJavier
01/05/2022, 9:06 AMursus
01/05/2022, 12:46 PMgildor
01/05/2022, 2:03 PMursus
01/05/2022, 2:05 PMgildor
01/05/2022, 2:05 PMursus
01/05/2022, 2:58 PMclass DataRepository {
suspend fun syncData() {
val data = api.data()
db.saveData(data)
}
}
gildor
01/06/2022, 3:05 AMclass DataRepository(private val appScope: CoroutineScope) {
private val syncJob: Job? = null
suspend fun syncData() {
if (syncJob?.isActive == true) {
syncJob.join()
} else {
syncJob = scope.launch {
val data = api.data()
db.saveData(data)
}
syncDeferred?.await()
}
}
}
You can add atomic access to Job and mutex if want to make it completely thread safe
Similar can be done with flow instead of job
At least this approach avoid duplicate requests, also you can add cooldown time, like delay(SOME_DELAY_BEFORE_SYNC) after saveData, so no additional requests would be doneursus
01/06/2022, 1:29 PMgildor
01/06/2022, 3:23 PMursus
01/07/2022, 2:01 PMgildor
01/08/2022, 2:39 PMursus
01/08/2022, 2:54 PMgildor
01/08/2022, 3:03 PMursus
01/08/2022, 4:39 PMgildor
01/09/2022, 1:20 AM