An async function can suspend before returning a value to the caller.

Await a result

input
async_functions.swift
Replay: real traced execution (multi-file project)
func doubled(_ value: Int) async -> Int {
    return value * 2
}

let input = 4
let result = await doubled(input)
let message = "result=\(result)"

print(message)
func doubled(_ value: Int) async -> Int {
    return value * 2
}

let input = 7
let result = await doubled(input)
let message = "result=\(result)"

print(message)
func doubled(_ value: Int) async -> Int {
    return value * 2
}

let input = 10
let result = await doubled(input)
let message = "result=\(result)"

print(message)
  1. input ← 4

    5let input→ 4 = 4  //@input=7, 106let result = await doubled(input4)7let message = "result=\(result)"
  2. func doubled(_ value: Int) async -> Int

    1func doubled(_ value4: Int) async -> Int {2    return value4 * 23}
  3. result ← 8, message ← result=8

    5let input = 4  //@input=7, 106let result→ 8 = await doubled(input4)7let message→ result=8 = "result=\(result8)"89print(messageresult=8)
    outputresult=8
  1. input ← 7

    5let input→ 7 = 76let result = await doubled(input7)7let message = "result=\(result)"
  2. func doubled(_ value: Int) async -> Int

    1func doubled(_ value7: Int) async -> Int {2    return value7 * 23}
  3. result ← 14, message ← result=14

    5let input = 76let result→ 14 = await doubled(input7)7let message→ result=14 = "result=\(result14)"89print(messageresult=14)
    outputresult=14
  1. input ← 10

    5let input→ 10 = 106let result = await doubled(input10)7let message = "result=\(result)"
  2. func doubled(_ value: Int) async -> Int

    1func doubled(_ value10: Int) async -> Int {2    return value10 * 23}
  3. result ← 20, message ← result=20

    5let input = 106let result→ 20 = await doubled(input10)7let message→ result=20 = "result=\(result20)"89print(messageresult=20)
    outputresult=20
async function `await` marks the point where the caller waits for an async function result.