The same slow task, handled two ways. One freezes the whole page until it finishes. The other hands it off and carries on. Run them side by side and watch the difference.
Code runs one line at a time. When a slow step runs, everything else waits for it. The page can freeze until it is done.
The slow step runs in the background while the rest of the code keeps going. The page stays responsive, things happen at once.
Both start at the same instant. Watch the synchronous side sit blocked on the slow task while the asynchronous side races ahead and lets it finish in the background.
Asynchronous does not automatically mean parallel. Awaiting inside a loop quietly runs requests one after another. It is the single most common mistake.