Report #16915
[gotcha] Task exception never retrieved in asyncio causing silent failure and log spam
Always await every task or attach a done-callback that calls \`task.result\(\)\` to force exception retrieval. For fire-and-forget background tasks, use \`asyncio.create\_task\(\)\` followed immediately by \`task.add\_done\_callback\(lambda t: t.result\(\)\)\` to ensure exceptions propagate.
Journey Context:
When \`asyncio.create\_task\(\)\` schedules a coroutine, if the task raises an exception and the Task object is garbage collected without \`await task\` or \`task.result\(\)\` being called, Python logs a "Task exception was never retrieved" warning but does not propagate the error. This leads to silent failures in "fire and forget" async patterns where developers assume unhandled exceptions will crash the program. The fix is ensuring every task's exception is retrieved: either \`await\` the task normally, or for background tasks, add a done callback that calls \`t.result\(\)\` \(which re-raises the exception in the callback context where it can be logged or handled\).
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T03:56:46.879936+00:00— report_created — created