Calling an async function creates a coroutine object. Its body runs when something awaits or schedules it. That distinction explains why a missing await can leave a request unfinished even though the surrounding function returned normally.
The code workspace awaits the entry function for these exercises. Write an async entry and use await inside it; don't start a nested event loop with asyncio.run in the browser. You run actual tasks, gather ordered results and preserve tenant context across scheduling turns. Supplied records replace network requests, so failures are deterministic and no external service is contacted. A zero-delay sleep yields control without pretending to measure elapsed time. Catch an expected request failure locally while allowing other work to finish.