A suspension point doesn’t mean the current thread is blocked. Nor it means the current actor is blocked. All it means is that the current task / function is blocked / suspended / waiting for an asynchronous task to finish.

@MainActor
func foo() async {
    doA()

    let b = await doB()
    doC()
}

When you get to doB(), then the MainActor / Main Thread are not suspended. Other tasks can be enqueued and executed on the main thread.

It’s just the foo function that gets suspended. Once doB() is complete, then the foo function / task is resumed.