Как избежать состояния гонки между двумя операциями сопрограммыAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как избежать состояния гонки между двумя операциями сопрограммы

Сообщение Anonymous »

У меня есть две операции, которые выполняются с помощью сопрограмм. Получение данных из хранилища данных настроек и выполнение вызова API (модернизация). Сетевой вызов зависит от знания того, какой тип единицы измерения предпочитает пользователь (по Фаренгейту, по Цельсию), поэтому мне нужно сначала получить эти данные, прежде чем запускать сетевой вызов.
Я не уверен, что Здесь я создаю состояние гонки или вызов функции приостановки, как показано ниже, всегда будет следовать правильному порядку вызова.
private suspend fun getUnits(): Units {
var openWeatherUnits: Units = Units.FAHRENHEIT // default
// Get Units
dataStore.readStringDataStore(UNITS_KEY).first().let { units ->
if (units != null) {
println("units: $units")
openWeatherUnits = Units.valueOf(units)
}
}
return openWeatherUnits
}

private fun getWeatherData() {
viewModelScope.launch(Dispatchers.IO) {
val units = getUnits()

// Make API call
val response = apiService.getCurrentWeather(
BuildConfig.OPEN_WEATHER_KEY,
units.value
)

}
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... operations
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»