这是我打开新协同程序的每个项目的代码,但是问题是我想对其进行优化并做一些限制,假设有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 {})
}
}
答案 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
协程。