【发布时间】:2019-10-17 08:52:06
【问题描述】:
我正在将我们当前的应用程序从 Java 转换为 Kotlin,我遇到了这个问题。
用于使用线程从服务器传输数据的 java 实现。
它将创建大约 100 个不同的线程来请求数据,但据我所知,一次运行的线程不超过 4 个,其他线程会等待线程完成后再开始。
在将它翻译成 Kotlin 时,我使用了协程
这会产生一个问题,因为服务器显然无法处理实际发送的 100 个请求。
所有协程都在同一个作用域内启动,所以是这样的:
//this is a custom scope that launches on Dispatchers.IO + a job that I can use to cancel everything
transferScope.launch {
//loadData is a suspending function that returns true/false
val futures = mDownloadJobs.map{ async { it.loadData() } }
val responses = futures.awaitAll()
//check that everything in responses is true etc....
}
有没有办法让特定的 transferScope 一次只允许最多 5 个协程,然后当一个完成时让另一个协程运行? (我不关心顺序)
如果不能通过范围来完成,有没有其他方法可以实现?
【问题讨论】: