•
async lets a function suspend without blocking its thread
•
other work runs and shared state can change across it
•
concurrency comes from creating tasks, not from the keyword
•
starts a child immediately and awaits it at the point of use
•
a dynamic number of children, all awaited before the group returns
•
a child task cannot outlive the scope that created it
•
Task {} inherits context; Task.detached inherits nothing
•
cancellation sets a flag; the task decides where to stop
•
at most one task runs an actor's isolated code at a time
•
reaching another actor's isolated member requires await
•
an actor may interleave other work at every await, so invariants must hold there
•
opting a member out of isolation so it can be called synchronously
•
@MainActor pins work to the main thread, and you can declare your own
•
a type whose values are safe to hand across an isolation boundary
•
for await, and AsyncStream for adapting a callback API
•
bridging a completion handler, with the resume-exactly-once rule
•
the language mode that turns concurrency warnings into errors