Start here. This is the direct spoken answer to practice first.
Overview
Explains task references, exceptions, caller lifetime, shutdown, and durable-work boundaries.
create_task() schedules a coroutine and returns immediately, so the caller no longer waits for its result. If nobody owns the task, its exception may go unobserved, shutdown may cancel it, and request-scoped resources may be closed before it finishes. The event loop keeps weak task references, so detached tasks also need a strong reference until completion. Reliable work needs explicit ownership, not a discarded return value.