Вам не нужен Анко, чтобы получить хороший код с сопрограммами.Кроме того, вам не нужно async
, и на самом деле вам следует избегать его в таких случаях, как ваш, когда вы просто хотите совершить неблокирующий вызов и не хотите запускать несколько таких вызовов одновременно.Ваша основная идиома должна быть
myScope.launch {
val result = sendRequest()
// UI work
}
, где sendRequest()
- это
suspend fun sendRequest() = withContext(Dispatchers.IO) { ... body ... }
Если вы звоните с Android Activity
, тогда myScope
может быть просто неявным this
, и ваша деятельность должна реализовывать CoroutineScope
:
class MyActivity : AppCompatActivity, CoroutineScope {
override val coroutineContext = SupervisorJob() + Dispatchers.Main
...
}
Чтобы получить больше информации, настоятельно рекомендуется прочитать 1011 * Явный параллелизм Романа Елизарова.