Kotlin 是否按参数顺序等待?

Does Kotlin await in order in parameters?

Kotlin 是否严格按顺序等待

  1. recipient.await()
  2. msg.await()

第 7 行:

 suspend fun sendEmail(r: String, msg: String): Boolean { //(6)
        delay(2000)
        println("Sent '$msg' to $r")
        return true
    }

    suspend fun getReceiverAddressFromDatabase(): String { //(4)
        delay(1000)
        return "coroutine@kotlin.org"
    }

    suspend fun sendEmailSuspending(): Boolean {
        val msg = async(CommonPool) {             //(3)
            delay(500)
            "The message content"
        }
        val recipient = async(CommonPool) {  //(5)
            getReceiverAddressFromDatabase()  
        } 
        println("Waiting for email data")
        val sendStatus = async(CommonPool) {
            sendEmail(recipient.await(), msg.await()) //(7)
        }
        return sendStatus.await() //(8)
    }

或者以任何顺序?我的意思是 Kotlin 是否首先检查 recipient.await() 并且只有在它完成后才去检查 msg.await()?

您的问题不是 await 特定的,而是更深入的问题,深入到 Kotlin 本身的评估顺序语义。

所以,这里引用 Kotlin language specification:

Function arguments are then evaluated in the order of their appearance in the function call left-to-right

应用于您的代码行:

sendEmail(recipient.await(), msg.await())

很明显,首先评估recipient.await(),然后评估msg.await()。在相关 Deferred 完成之前,await() 调用不会完成。