У меня есть следующий код, который я пытаюсь запустить для параллельного запуска сопрограмм. Однако код не работает параллельно. Для возврата всех цен на акции требуется 30 секунд вместо 10 секунд. Однако, если я использую GlobalScope.launch, он работает правильно. Из документации я понял, что нам следует избегать использования GlobalScope и использовать область сопрограмм. Можете ли вы помочь понять, почему это не работает параллельно?
import kotlinx.coroutines.*
suspend fun getStockPrice(company: String) : Int{
println("Fetching Stock Price")
Thread.sleep(10000)
return 100
}
fun CoroutineScope.launchCoRoutines() {
val companies = listOf<String>("Google", "Amazon", "Microsoft")
launch {
var startTime = System.currentTimeMillis()
val sharePrice = mutableListOf<Deferred<Int>>()
for (company in companies) {
sharePrice += async {
getStockPrice(company).toInt()
}
}
for (share in sharePrice) {
println(share.await())
}
var endTime = System.currentTimeMillis()
println(endTime - startTime)
}
}
fun main() {
runBlocking{
launchCoRoutines()
}
println("Request Sent")
Thread.sleep(55000)
}