如何使用Kotlin协程优化代码?

时间:2019-08-14 14:50:41

标签: android kotlin kotlin-coroutines

这是我打开新协同程序的每个项目的代码,但是问题是我想对其进行优化并做一些限制,假设有5个协同程序,我知道协同程序Action有一个解决方案,但是我不知道我不知道如何在这里介绍他们。任何帮助都可能有用

  uiScope.launch {
        val infoItem = fetchItems(item.query)
        infoItems.add(infoItem)
        itemsMutableData.postValue(infoItems)
      }
  }

  override suspend fun fetchItems(query: String): Response<List<Item>>{
    return suspendCoroutine {})
    }
  }

1 个答案:

答案 0 :(得分:0)

我希望我猜对了你的问题。您有一堆Stuff,并且必须对其中的每一个进行异步调用。为它们每个创建一个协程都很好。

val stuffList: List<Stuff> = ...
stuffList.map {
    launch {
        process(it)
    }
}.joinAll()

但是这段代码一次发出了很多请求。因此,您想限制并发性,最多可以限制5个并发调用。

在github上,“最佳”模式仍然是an open issue。 您应该看看他们的想法。


现在您可以使用幼稚的实现。

  • 创建作品Channel,将内容发送给它,然后将其关闭。
  • launch n与其进行receive的协程,并处理Stuff直到到达ClosedReceiveChannelException
  • join协程。