Я должен выполнить http-запрос (Retrofit 2) в фоновом потоке.
подход № 1:
suspend fun getTraidersList(): TransportResponse = withContext(Dispatchers.IO) {
val traderMonitorRestClient = RestClientFactory.createRestClient(TraderMonitorRestClient::class.java)
executeOperation { traderMonitorRestClient.getTraidersList() }
}
suspend private fun executeOperation(transportOperation: suspend () -> Response<*>): TransportResponse {
try {
val response: Response<*> = transportOperation()
return onResponse(response)
} catch (e: Throwable) {
return onNetworkFailure(e)
}
}
}
Как вы можете видеть метод getTraidersList()
это начало в фоновом потоке withContext(Dispatchers.IO)
.Но в методе executeOperation
я не использую withContext(Dispatchers.IO)
.
Хорошо.Это нормально работает.
подход # 2:
Использование withContext(Dispatchers.IO)
также в методе executeOperation
suspend fun getTraidersList(): TransportResponse = withContext(Dispatchers.IO) {
val traderMonitorRestClient = RestClientFactory.createRestClient(TraderMonitorRestClient::class.java)
executeOperation { traderMonitorRestClient.getTraidersList() }
}
suspend private fun executeOperation(transportOperation: suspend () -> Response<*>): TransportResponse = withContext(Dispatchers.IO) {
try {
val response: Response<*> = transportOperation()
onResponse(response)
} catch (e: Throwable) {
onNetworkFailure(e)
}
}
Оба подхода работают.Но какой подход правильный?Может быть, оба подхода верны?