Kotlin coroutineScope 应该同时调用所有异步函数

Kotlin coroutineScope supposed to call all async functions concurrently

我是 Kotlin 新手,coroutines

我有以下代码:

  fun asyncCallForRelationIdList(relationIds: List<String>): List<Any?> = runBlocking {
    println("Starting asynchronous code flow")
    asyncCallForUserIdList(relationIds)
  }

  suspend fun asyncCallForUserIdList(userIds: List<String>): List<Any?> = coroutineScope {
    println("Elements in list are supposed to call api concurrently")
    val listval = mutableListOf<Any?>()
    val result0 = async {restApiCall(relationId = userIds[0])}
    val result1 = async {restApiCall(relationId = userIds[1])}
    listval.add(result0.await())
    listval.add(result1.await())
    listval.toList()
  }

  suspend fun restApiCall(relationId: String): Any? {
    println("api call... the api will timeout with an artificial delay")
    //api call
    //return "api result"
  }

asyncCallForRelationIdList() 函数将调用 asyncCallForUserIdList(),然后调用 API 将超时。

我的问题是关于我在 coroutineScope 中使用的 async 关键字。我希望 2 个异步调用同时发生。但这里不是这种情况。在第一次 api 调用后,线程等待服务超时,而不是同时进行第二次 api 调用。为什么?

您正在使用 运行Blocking,因此它会一个接一个地阻塞主线程和 运行。它不是启动异步代码流

将您的异步调用更改为 async(Dispatchers.IO) { ... } 因为它们实际上不是异步的,目前它们 运行 在 runBlocking

的范围内

感谢@Pawel