CoroutineContext получает отладочную информацию - PullRequest
0 голосов
/ 25 июня 2019

Я сталкиваюсь с меньшей проблемой, когда речь заходит о сопрограммах Kotlin:

У меня есть список записей, которые все могут передать «задание», которое вызывается с помощью CoroutineContext.IO. Я заметил некоторые проблемы при прокрутке списка, когда эти записи запрашиваются, как только они становятся видимыми. Каждый Entrys вызывает «Запрашивающего», который вызывает переданный Запрос:

override fun <T : Any> enqueue(request: () -> Result<T>) {
    job = CoroutineScope(provider.io()).launch {
        (coroutineName)
        try {
            when (val result = request()) {
                is Result.Success -> {
                    notifyAdapter(result)
                }
                is Result.Error -> {
                    notifyAdapter(result)
                }
            }
        } catch (firewall: Exception) {
            logger.e(tag, "Failed to Request Data", firewall)

        }
    }

}

Я заметил, что эти запросы вызывают «рывки» при рендеринге пользовательского интерфейса. Выше код будет выполняться где-то между 4-12 запросами, в зависимости от отображаемых Entrys. Я прочитал, что IO CoroutineContext не связан и будет создавать потоки в фоновом режиме, когда это необходимо, поэтому не должно быть никаких проблем, поскольку все они находятся в другом потоке. После того, как запрос сделан, я передаю результат запроса вызывающей стороне в главном потоке:

private suspend fun notifyAdapter(result: Result<Any>) =
    withContext(provider.main()) {
        notifyResult.requestUpdate(id, result)
    }

Я все еще пытаюсь лучше понять проблему "джанка", так есть ли какая-то отладочная информация, как / когда создаются потоки в IO CoroutineContext?

Спасибо за вашу помощь.

...