Concurrency Concepts
Async Functions
An async function can suspend before returning a value to the caller.
Await a result
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)
input ← 4
5let input→ 4 = 4 //@input=7, 106let result = await doubled(input4)7let message = "result=\(result)"func doubled(_ value: Int) async -> Int
1func doubled(_ value4: Int) async -> Int {2 return value4 * 23}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
input ← 7
5let input→ 7 = 76let result = await doubled(input7)7let message = "result=\(result)"func doubled(_ value: Int) async -> Int
1func doubled(_ value7: Int) async -> Int {2 return value7 * 23}result ← 14, message ← result=14
5let input = 76let result→ 14 = await doubled(input7)7let message→ result=14 = "result=\(result14)"89print(messageresult=14)outputresult=14
input ← 10
5let input→ 10 = 106let result = await doubled(input10)7let message = "result=\(result)"func doubled(_ value: Int) async -> Int
1func doubled(_ value10: Int) async -> Int {2 return value10 * 23}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.