Ваш вопрос не await
-специфический c, и он гораздо глубже, вплоть до семантики порядка оценки самого Kotlin.
Итак, вот цитата из Kotlin спецификация языка :
Затем аргументы функции оцениваются в порядке их появления при вызове функции слева направо
Применяется к вашей строке кода:
sendEmail(recipient.await(), msg.await())
ясно, что сначала recipient.await()
оценивается, а затем msg.await()
. Вызов await()
не завершится, пока не будет завершен рассматриваемый Deferred
.