1:"$Sreact.fragment"
2:I[75473,["/_next/static/chunks/316a3a63422f35de.js"],"default"]
3:I[78515,["/_next/static/chunks/316a3a63422f35de.js"],"default"]
4:I[30687,["/_next/static/chunks/fd0661f1506dcbc6.js"],"Toaster"]
5:I[61076,["/_next/static/chunks/fd0661f1506dcbc6.js"],"Analytics"]
7:I[47913,["/_next/static/chunks/316a3a63422f35de.js"],"OutletBoundary"]
8:"$Sreact.suspense"
a:I[47913,["/_next/static/chunks/316a3a63422f35de.js"],"ViewportBoundary"]
c:I[47913,["/_next/static/chunks/316a3a63422f35de.js"],"MetadataBoundary"]
e:I[90849,["/_next/static/chunks/316a3a63422f35de.js"],"default"]
:HL["/_next/static/chunks/609ea7bc18d0d15f.css","style"]
:HL["/_next/static/chunks/93b606aa9fdccd13.css","style"]
:HL["/_next/static/media/797e433ab948586e-s.p.479bea2b.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/media/caa3a2e1cccd8315-s.p.3b6cae6d.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
0:{"P":null,"b":"TlpKRvbES4zzM7LeczAM7","c":["","blog","fire-and-forget-asyncio"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":[["slug","fire-and-forget-asyncio","d"],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/609ea7bc18d0d15f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/chunks/93b606aa9fdccd13.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/fd0661f1506dcbc6.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":[["$","head",null,{"children":[["$","script",null,{"async":true,"src":"https://www.googletagmanager.com/gtag/js?id=AW-18009878040"}],["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n          window.dataLayer = window.dataLayer || [];\n          function gtag(){dataLayer.push(arguments);}\n          gtag('js', new Date());\n          gtag('config', 'AW-18009878040');\n          gtag('config', 'G-W3XKYXV2SG');\n\n          // Persist UTM and gclid params to sessionStorage for cross-page tracking\n          (function() {\n            var params = new URLSearchParams(window.location.search);\n            var keys = ['utm_source','utm_medium','utm_campaign','utm_content','utm_term','gclid'];\n            keys.forEach(function(k) {\n              var v = params.get(k);\n              if (v) sessionStorage.setItem(k, v);\n            });\n          })();\n        "}}]]}],["$","body",null,{"className":"font-sans antialiased","children":[["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$L4",null,{"position":"top-center","richColors":true,"toastOptions":{"style":{"background":"var(--popover)","color":"var(--popover-foreground)","border":"1px solid var(--border)"}}}],["$","$L5",null,{}]]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":["$L6",[["$","script","script-0",{"src":"/_next/static/chunks/94245cbda44972fe.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/af778fff4a0f4be6.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/b096b037d08e2f31.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"children":["$","$8",null,{"name":"Next.MetadataOutlet","children":"$@9"}]}]]}],{},null,false,false]},null,false,false]},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$La",null,{"children":"$Lb"}],["$","div",null,{"hidden":true,"children":["$","$Lc",null,{"children":["$","$8",null,{"name":"Next.Metadata","children":"$Ld"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$e",[]],"S":true}
f:I[15579,["/_next/static/chunks/fd0661f1506dcbc6.js","/_next/static/chunks/94245cbda44972fe.js","/_next/static/chunks/af778fff4a0f4be6.js","/_next/static/chunks/b096b037d08e2f31.js"],"Navigation"]
10:I[3013,["/_next/static/chunks/fd0661f1506dcbc6.js","/_next/static/chunks/94245cbda44972fe.js","/_next/static/chunks/af778fff4a0f4be6.js","/_next/static/chunks/b096b037d08e2f31.js"],""]
:HL["/blog/posts/fire-and-forget-asyncio/hero.jpg","image"]
:HL["/blog/posts/logo.png","image"]
6:[["$","$Lf",null,{}],["$","main",null,{"className":"pt-20 md:pt-24","children":["$","article",null,{"children":[["$","header",null,{"className":"border-b border-border","children":["$","div",null,{"className":"container mx-auto px-6 py-14 md:py-20","children":[["$","$L10",null,{"href":"/blog","className":"mb-8 inline-flex items-center text-sm font-medium text-muted-foreground transition-colors hover:text-foreground","children":[["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-arrow-left mr-2 h-4 w-4","aria-hidden":"true","children":[["$","path","1l729n",{"d":"m12 19-7-7 7-7"}],["$","path","x3x0zl",{"d":"M19 12H5"}],"$undefined"]}],"Blog"]}],["$","div",null,{"className":"grid gap-8 md:grid-cols-[1fr_0.9fr] md:items-start","children":[["$","div",null,{"className":"max-w-3xl","children":[["$","div",null,{"className":"mb-5 flex flex-wrap items-center gap-3 text-sm text-muted-foreground","children":[["$","span",null,{"className":"rounded-md border border-primary/40 bg-primary/10 px-2.5 py-1 text-primary","children":"Concurrency"}],["$","span",null,{"children":"2026-W20"}],["$","span",null,{"aria-hidden":"true","children":"/"}],["$","span",null,{"children":"5 min read"}],[["$","span",null,{"aria-hidden":"true","children":"/"}],["$","span",null,{"children":["by ",["$","span",null,{"className":"font-medium text-foreground","children":"delve"}]]}]]]}],["$","h1",null,{"className":"text-4xl font-bold leading-tight text-balance md:text-6xl","children":"Fire-and-Forget asyncio.create_task Is a Reliability Trap"}],["$","p",null,{"className":"mt-6 text-lg leading-relaxed text-muted-foreground md:text-xl","children":"An unawaited `create_task` looks identical to a properly-handled background task — until the day it raises an exception, your endpoint returns 200, and nobody knows the notification never went out. Failures must surface somewhere, or they don't exist."}]]}],["$","div",null,{"className":"overflow-hidden rounded-lg border border-border bg-card","children":["$","div",null,{"className":"relative aspect-[16/9] overflow-hidden","children":[null,["$","img",null,{"src":"/blog/posts/fire-and-forget-asyncio/hero.jpg","alt":"A paper airplane mid-flight against a slate-grey wall, sharp focus on the folded nose, no people, no hands, dramatic single-source side light, editorial.","className":"h-full w-full object-cover"}],["$","img",null,{"src":"/blog/posts/logo.png","alt":"","aria-hidden":"true","className":"pointer-events-none absolute right-4 top-4 h-[50px] w-[50px] mix-blend-screen"}]]}]}]]}]]}]}],["$","div",null,{"className":"container mx-auto px-6 py-12 md:py-16","children":["$","div",null,{"className":"grid gap-10 lg:grid-cols-[minmax(0,1fr)_280px] lg:items-start","children":[["$","div",null,{"className":"max-w-3xl text-muted-foreground","children":[[["$","h2","h2-0",{"className":"mt-12 text-2xl font-semibold leading-snug text-foreground first:mt-0","children":"The problem"}],"\n",["$","p","p-0",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":["You have an async route that needs to push a notification after saving to the database. The notification is not in the critical path — if it fails, the HTTP response can still succeed. So you reach for ",["$","code","code-0",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"asyncio.create_task"}],":"]}],"\n",["$","div","pre-0",{"style":{"background":"hsl(220, 13%, 18%)","color":"hsl(220, 14%, 71%)","textShadow":"0 1px rgba(0, 0, 0, 0.3)","fontFamily":"\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace","direction":"ltr","textAlign":"left","whiteSpace":"pre","wordSpacing":"normal","wordBreak":"normal","lineHeight":"1.5","MozTabSize":"2","OTabSize":"2","tabSize":"2","WebkitHyphens":"none","MozHyphens":"none","msHyphens":"none","hyphens":"none","padding":"1rem","margin":"0.5em 0","overflow":"auto","borderRadius":"0.5rem","marginTop":"1.25rem","marginBottom":0,"border":"1px solid hsl(var(--border))","fontSize":"0.875rem"},"children":"$L11"}],"\n","$L12","\n","$L13","\n","$L14","\n","$L15","\n","$L16","\n","$L17","\n","$L18","\n","$L19","\n","$L1a","\n","$L1b","\n","$L1c","\n","$L1d","\n","$L1e"],"$L1f",null]}],"$L20"]}]}]]}]}],"$L21"]
43:I[41451,["/_next/static/chunks/fd0661f1506dcbc6.js","/_next/static/chunks/94245cbda44972fe.js","/_next/static/chunks/af778fff4a0f4be6.js","/_next/static/chunks/b096b037d08e2f31.js"],"Footer"]
11:["$","code",null,{"style":{"whiteSpace":"pre","fontFamily":"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace"},"children":[false,[["$","span","code-segment-0",{"className":"token decorator annotation","style":{"color":"hsl(220, 14%, 71%)"},"children":["@app"]}],["$","span","code-segment-1",{"className":"token decorator annotation","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}],["$","span","code-segment-2",{"className":"token decorator annotation","style":{"color":"hsl(220, 14%, 71%)"},"children":["post"]}],["$","span","code-segment-3",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}],["$","span","code-segment-4",{"className":"token","style":{"color":"hsl(95, 38%, 62%)"},"children":["\"/webhook\""]}],["$","span","code-segment-5",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}],["$","span","code-segment-6",{"className":"$undefined","style":{},"children":["\n"]}],["$","span","code-segment-7",{"className":"$undefined","style":{},"children":[""]}],["$","span","code-segment-8",{"className":"token","style":{"color":"hsl(286, 60%, 67%)"},"children":["async"]}],["$","span","code-segment-9",{"className":"$undefined","style":{},"children":[" "]}],["$","span","code-segment-10",{"className":"token","style":{"color":"hsl(286, 60%, 67%)"},"children":["def"]}],["$","span","code-segment-11",{"className":"$undefined","style":{},"children":[" "]}],["$","span","code-segment-12",{"className":"token","style":{"color":"hsl(207, 82%, 66%)"},"children":["webhook"]}],["$","span","code-segment-13",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}],["$","span","code-segment-14",{"className":"$undefined","style":{},"children":["request"]}],["$","span","code-segment-15",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[":"]}],["$","span","code-segment-16",{"className":"$undefined","style":{},"children":[" Request"]}],["$","span","code-segment-17",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}],["$","span","code-segment-18",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[":"]}],["$","span","code-segment-19",{"className":"$undefined","style":{},"children":["\n"]}],["$","span","code-segment-20",{"className":"$undefined","style":{},"children":["    "]}],["$","span","code-segment-21",{"className":"token","style":{"color":"hsl(220, 10%, 40%)","fontStyle":"italic"},"children":["# ... validate, parse, save ..."]}],["$","span","code-segment-22",{"className":"$undefined","style":{},"children":["\n"]}],["$","span","code-segment-23",{"className":"$undefined","style":{},"children":["    asyncio"]}],["$","span","code-segment-24",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}],["$","span","code-segment-25",{"className":"$undefined","style":{},"children":["create_task"]}],["$","span","code-segment-26",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}],["$","span","code-segment-27",{"className":"$undefined","style":{},"children":["notifier"]}],["$","span","code-segment-28",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}],["$","span","code-segment-29",{"className":"$undefined","style":{},"children":["send"]}],["$","span","code-segment-30",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}],["$","span","code-segment-31",{"className":"$undefined","style":{},"children":["recipient"]}],["$","span","code-segment-32",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[","]}],["$","span","code-segment-33",{"className":"$undefined","style":{},"children":[" payload"]}],["$","span","code-segment-34",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}],["$","span","code-segment-35",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}],["$","span","code-segment-36",{"className":"$undefined","style":{},"children":["\n"]}],["$","span","code-segment-37",{"className":"$undefined","style":{},"children":["    "]}],["$","span","code-segment-38",{"className":"token","style":{"color":"hsl(286, 60%, 67%)"},"children":["return"]}],["$","span","code-segment-39",{"className":"$undefined","style":{},"children":[" "]}],["$","span","code-segment-40",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["{"]}],["$","span","code-segment-41",{"className":"token","style":{"color":"hsl(95, 38%, 62%)"},"children":["\"ok\""]}],["$","span","code-segment-42",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[":"]}],["$","span","code-segment-43",{"className":"$undefined","style":{},"children":[" "]}],["$","span","code-segment-44",{"className":"token","style":{"color":"hsl(29, 54%, 61%)"},"children":["True"]}],"$L22"]]}]
12:["$","p","p-1",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":["The route returns immediately, the task runs \"in the background.\" This works during development. In production you ship it, and then one day the notifier raises an exception inside ",["$","code","code-0",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"send"}],". Your logs are clean. Your endpoint returns 200. The recipient never receives the notification, and nobody knows."]}]
13:["$","p","p-2",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":[["$","code","code-0",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"asyncio.create_task"}]," wraps a coroutine in a ",["$","code","code-1",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"Task"}]," object and schedules it on the current event loop. If the task raises an unhandled exception, Python emits a ",["$","code","code-2",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"Task exception was never retrieved"}]," warning to ",["$","code","code-3",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"sys.stderr"}]," — ",["$","em","em-0",{"children":"if"}]," the garbage collector runs before the task is reclaimed. That warning is easily missed, especially when it arrives hours after the request that caused it. The request itself returned 200. The caller has no way to know anything failed."]}]
14:["$","h2","h2-1",{"className":"mt-12 text-2xl font-semibold leading-snug text-foreground first:mt-0","children":"The approach"}]
15:["$","p","p-3",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":"Two patterns worth knowing:"}]
16:["$","p","p-4",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":[["$","strong","strong-0",{"children":"Await the coroutine directly"}]," if the caller should know about failures. This is almost always the right choice when the notification is part of the expected success path:"]}]
17:["$","div","pre-1",{"style":{"background":"hsl(220, 13%, 18%)","color":"hsl(220, 14%, 71%)","textShadow":"0 1px rgba(0, 0, 0, 0.3)","fontFamily":"\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace","direction":"ltr","textAlign":"left","whiteSpace":"pre","wordSpacing":"normal","wordBreak":"normal","lineHeight":"1.5","MozTabSize":"2","OTabSize":"2","tabSize":"2","WebkitHyphens":"none","MozHyphens":"none","msHyphens":"none","hyphens":"none","padding":"1rem","margin":"0.5em 0","overflow":"auto","borderRadius":"0.5rem","marginTop":"1.25rem","marginBottom":0,"border":"1px solid hsl(var(--border))","fontSize":"0.875rem"},"children":["$","code",null,{"style":{"whiteSpace":"pre","fontFamily":"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace"},"children":[false,[["$","span","code-segment-0",{"className":"token","style":{"color":"hsl(286, 60%, 67%)"},"children":["try"]}],["$","span","code-segment-1",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[":"]}],["$","span","code-segment-2",{"className":"$undefined","style":{},"children":["\n"]}],["$","span","code-segment-3",{"className":"$undefined","style":{},"children":["    "]}],["$","span","code-segment-4",{"className":"token","style":{"color":"hsl(286, 60%, 67%)"},"children":["await"]}],["$","span","code-segment-5",{"className":"$undefined","style":{},"children":[" notifier"]}],["$","span","code-segment-6",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}],["$","span","code-segment-7",{"className":"$undefined","style":{},"children":["send"]}],["$","span","code-segment-8",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}],["$","span","code-segment-9",{"className":"$undefined","style":{},"children":["recipient"]}],["$","span","code-segment-10",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[","]}],["$","span","code-segment-11",{"className":"$undefined","style":{},"children":[" payload"]}],["$","span","code-segment-12",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}],["$","span","code-segment-13",{"className":"$undefined","style":{},"children":["\n"]}],["$","span","code-segment-14",{"className":"$undefined","style":{},"children":[""]}],["$","span","code-segment-15",{"className":"token","style":{"color":"hsl(286, 60%, 67%)"},"children":["except"]}],["$","span","code-segment-16",{"className":"$undefined","style":{},"children":[" Exception "]}],["$","span","code-segment-17",{"className":"token","style":{"color":"hsl(286, 60%, 67%)"},"children":["as"]}],["$","span","code-segment-18",{"className":"$undefined","style":{},"children":[" e"]}],["$","span","code-segment-19",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[":"]}],["$","span","code-segment-20",{"className":"$undefined","style":{},"children":["\n"]}],["$","span","code-segment-21",{"className":"$undefined","style":{},"children":["    logger"]}],["$","span","code-segment-22",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}],["$","span","code-segment-23",{"className":"$undefined","style":{},"children":["warning"]}],["$","span","code-segment-24",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}],["$","span","code-segment-25",{"className":"token string-interpolation","style":{"color":"hsl(95, 38%, 62%)"},"children":["f\"delivery to "]}],["$","span","code-segment-26",{"className":"token string-interpolation interpolation","style":{"color":"hsl(220, 14%, 71%)"},"children":["{"]}],["$","span","code-segment-27",{"className":"token string-interpolation interpolation","style":{},"children":["recipient"]}],["$","span","code-segment-28",{"className":"token string-interpolation interpolation conversion-option","style":{"color":"hsl(220, 14%, 71%)"},"children":["!r"]}],["$","span","code-segment-29",{"className":"token string-interpolation interpolation","style":{"color":"hsl(220, 14%, 71%)"},"children":["}"]}],["$","span","code-segment-30",{"className":"token string-interpolation","style":{"color":"hsl(95, 38%, 62%)"},"children":[" failed: "]}],["$","span","code-segment-31",{"className":"token string-interpolation interpolation","style":{"color":"hsl(220, 14%, 71%)"},"children":["{"]}],["$","span","code-segment-32",{"className":"token string-interpolation interpolation","style":{},"children":["e"]}],["$","span","code-segment-33",{"className":"token string-interpolation interpolation","style":{"color":"hsl(220, 14%, 71%)"},"children":["}"]}],"$L23","$L24","$L25","$L26","$L27","$L28","$L29","$L2a","$L2b","$L2c","$L2d","$L2e","$L2f","$L30","$L31","$L32","$L33","$L34"]]}]}]
18:["$","p","p-5",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":"The route takes slightly longer. The failure is surfaced. The caller gets a non-200 if the notification fails, which is accurate."}]
19:["$","p","p-6",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":[["$","strong","strong-0",{"children":"Store a reference if true background execution is required."}]," If the work genuinely must not block the response, keep a reference to the task so exceptions are not silently swallowed:"]}]
1a:["$","div","pre-2",{"style":{"background":"hsl(220, 13%, 18%)","color":"hsl(220, 14%, 71%)","textShadow":"0 1px rgba(0, 0, 0, 0.3)","fontFamily":"\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace","direction":"ltr","textAlign":"left","whiteSpace":"pre","wordSpacing":"normal","wordBreak":"normal","lineHeight":"1.5","MozTabSize":"2","OTabSize":"2","tabSize":"2","WebkitHyphens":"none","MozHyphens":"none","msHyphens":"none","hyphens":"none","padding":"1rem","margin":"0.5em 0","overflow":"auto","borderRadius":"0.5rem","marginTop":"1.25rem","marginBottom":0,"border":"1px solid hsl(var(--border))","fontSize":"0.875rem"},"children":["$","code",null,{"style":{"whiteSpace":"pre","fontFamily":"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace"},"children":[false,[["$","span","code-segment-0",{"className":"$undefined","style":{},"children":["_background_tasks"]}],["$","span","code-segment-1",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[":"]}],["$","span","code-segment-2",{"className":"$undefined","style":{},"children":[" "]}],["$","span","code-segment-3",{"className":"token","style":{"color":"hsl(95, 38%, 62%)"},"children":["set"]}],["$","span","code-segment-4",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["["]}],["$","span","code-segment-5",{"className":"$undefined","style":{},"children":["asyncio"]}],["$","span","code-segment-6",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}],["$","span","code-segment-7",{"className":"$undefined","style":{},"children":["Task"]}],["$","span","code-segment-8",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["]"]}],["$","span","code-segment-9",{"className":"$undefined","style":{},"children":[" "]}],["$","span","code-segment-10",{"className":"token","style":{"color":"hsl(207, 82%, 66%)"},"children":["="]}],["$","span","code-segment-11",{"className":"$undefined","style":{},"children":[" "]}],["$","span","code-segment-12",{"className":"token","style":{"color":"hsl(95, 38%, 62%)"},"children":["set"]}],["$","span","code-segment-13",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}],["$","span","code-segment-14",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}],["$","span","code-segment-15",{"className":"$undefined","style":{},"children":["\n"]}],"\n",["$","span","code-segment-17",{"className":"$undefined","style":{},"children":[""]}],["$","span","code-segment-18",{"className":"token","style":{"color":"hsl(286, 60%, 67%)"},"children":["def"]}],["$","span","code-segment-19",{"className":"$undefined","style":{},"children":[" "]}],["$","span","code-segment-20",{"className":"token","style":{"color":"hsl(207, 82%, 66%)"},"children":["_create_background_task"]}],["$","span","code-segment-21",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}],["$","span","code-segment-22",{"className":"$undefined","style":{},"children":["coro"]}],["$","span","code-segment-23",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}],["$","span","code-segment-24",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[":"]}],["$","span","code-segment-25",{"className":"$undefined","style":{},"children":["\n"]}],["$","span","code-segment-26",{"className":"$undefined","style":{},"children":["    task "]}],["$","span","code-segment-27",{"className":"token","style":{"color":"hsl(207, 82%, 66%)"},"children":["="]}],["$","span","code-segment-28",{"className":"$undefined","style":{},"children":[" asyncio"]}],["$","span","code-segment-29",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}],["$","span","code-segment-30",{"className":"$undefined","style":{},"children":["create_task"]}],["$","span","code-segment-31",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}],["$","span","code-segment-32",{"className":"$undefined","style":{},"children":["coro"]}],["$","span","code-segment-33",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}],["$","span","code-segment-34",{"className":"$undefined","style":{},"children":["\n"]}],["$","span","code-segment-35",{"className":"$undefined","style":{},"children":["    _background_tasks"]}],["$","span","code-segment-36",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}],["$","span","code-segment-37",{"className":"$undefined","style":{},"children":["add"]}],["$","span","code-segment-38",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}],["$","span","code-segment-39",{"className":"$undefined","style":{},"children":["task"]}],["$","span","code-segment-40",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}],"$L35","$L36","$L37","$L38","$L39","$L3a","$L3b","$L3c","$L3d","$L3e","$L3f","$L40","$L41"]]}]}]
1b:["$","p","p-7",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":[["$","code","code-0",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"add_done_callback"}]," fires when the task completes, whether successfully or with an exception. If you attach a callback that logs the exception, nothing is silently swallowed. The set keeps a hard reference so the task is not garbage-collected before it finishes."]}]
1c:["$","h2","h2-2",{"className":"mt-12 text-2xl font-semibold leading-snug text-foreground first:mt-0","children":"What I learned"}]
1d:["$","p","p-8",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":["The silencing property of fire-and-forget tasks is not obvious from the code. It looks almost identical to a properly-handled background task, but the difference is whether failures surface anywhere. A 500ms timeout on ",["$","code","code-0",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"send"}]," with the first pattern would have surfaced the problem immediately in the test environment. With ",["$","code","code-1",{"className":"rounded bg-secondary px-1.5 py-0.5 text-[0.9em] text-foreground","children":"create_task"}],", the failure moved entirely out of observable state."]}]
1e:["$","p","p-9",{"className":"mt-4 text-base leading-8 md:text-lg first:mt-0 first:text-xl first:leading-relaxed first:text-foreground md:first:text-2xl","children":"The rule I now use: if a task's failure would require me to manually check logs to know it happened, the task should be awaited with an explicit error path. True fire-and-forget — where the outcome genuinely does not matter — is rarer than it feels in the moment."}]
1f:["$","div",null,{"className":"mt-14 border-t border-border pt-8","children":["$","$L10",null,{"href":"/platform","className":"inline-flex items-center text-sm font-medium text-primary transition-colors hover:text-primary/80","children":["Start a build",["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-arrow-right ml-2 h-4 w-4","aria-hidden":"true","children":[["$","path","1ays0h",{"d":"M5 12h14"}],["$","path","xquz4c",{"d":"m12 5 7 7-7 7"}],"$undefined"]}]]}]}]
20:["$","aside",null,{"className":"hidden lg:block","children":["$","div",null,{"className":"sticky top-24 space-y-4","children":[["$","h3",null,{"className":"text-xs font-semibold uppercase tracking-wider text-primary","children":["More in ","Concurrency"]}],["$","div",null,{"className":"space-y-4","children":[["$","$L10","bcrypt-async-event-loop",{"href":"/blog/bcrypt-async-event-loop","className":"block overflow-hidden rounded-lg border border-border bg-card transition-colors hover:border-primary/40","children":[["$","div",null,{"className":"relative aspect-[16/9] overflow-hidden bg-secondary/70","children":[["$","img",null,{"src":"/blog/posts/bcrypt-async-event-loop/hero.jpg","alt":"A solitary traffic light glowing red over an empty asphalt road at dusk, no cars, no people, sharp editorial photography.","className":"h-full w-full object-cover","loading":"lazy","decoding":"async"}],["$","img",null,{"src":"/blog/posts/logo.png","alt":"","aria-hidden":"true","className":"pointer-events-none absolute right-2 top-2 h-[24px] w-[24px] mix-blend-screen"}]]}],["$","div",null,{"className":"p-4","children":[["$","p",null,{"className":"text-xs font-medium text-primary","children":"Concurrency"}],["$","p",null,{"className":"mt-1 text-xs text-muted-foreground","children":["2026-W20"," · ","4 min"]}],["$","p",null,{"className":"mt-2 line-clamp-2 text-sm font-semibold leading-snug text-foreground","children":"bcrypt in an Async Codebase — The Three Places It Bites You"}]]}]]}],["$","$L10","toctou-async-database-handlers",{"href":"/blog/toctou-async-database-handlers","className":"block overflow-hidden rounded-lg border border-border bg-card transition-colors hover:border-primary/40","children":[["$","div",null,{"className":"relative aspect-[16/9] overflow-hidden bg-secondary/70","children":[["$","img",null,{"src":"/blog/posts/toctou-async-database-handlers/hero.jpg","alt":"A close-up macro shot of two identical brass keys sliding into the same antique brass door lock simultaneously against a dark wooden door, dramatic side lighting, no people, sharp editorial focus.","className":"h-full w-full object-cover","loading":"lazy","decoding":"async"}],["$","img",null,{"src":"/blog/posts/logo.png","alt":"","aria-hidden":"true","className":"pointer-events-none absolute right-2 top-2 h-[24px] w-[24px] mix-blend-screen"}]]}],["$","div",null,{"className":"p-4","children":[["$","p",null,{"className":"text-xs font-medium text-primary","children":"Concurrency"}],["$","p",null,{"className":"mt-1 text-xs text-muted-foreground","children":["2026-W20"," · ","4 min"]}],["$","p",null,{"className":"mt-2 line-clamp-2 text-sm font-semibold leading-snug text-foreground","children":"TOCTOU Races in Async Database Handlers"}]]}]]}],["$","$L10","async-sqlite-fastapi",{"href":"/blog/async-sqlite-fastapi","className":"block overflow-hidden rounded-lg border border-border bg-card transition-colors hover:border-primary/40","children":[["$","div",null,{"className":"relative aspect-[16/9] overflow-hidden bg-secondary/70","children":[["$","img",null,{"src":"/blog/posts/async-sqlite-fastapi/hero.jpg","alt":"A single brass funnel on a worn wooden workbench with one droplet caught mid-fall above its narrow neck, sharp focus on the droplet, soft side light, no people, editorial.","className":"h-full w-full object-cover","loading":"lazy","decoding":"async"}],["$","img",null,{"src":"/blog/posts/logo.png","alt":"","aria-hidden":"true","className":"pointer-events-none absolute right-2 top-2 h-[24px] w-[24px] mix-blend-screen"}]]}],["$","div",null,{"className":"p-4","children":[["$","p",null,{"className":"text-xs font-medium text-primary","children":"Concurrency"}],["$","p",null,{"className":"mt-1 text-xs text-muted-foreground","children":["2026-W20"," · ","4 min"]}],["$","p",null,{"className":"mt-2 line-clamp-2 text-sm font-semibold leading-snug text-foreground","children":"Blocking SQLite in an Async FastAPI Route"}]]}]]}]]}],["$","$L10",null,{"href":"/blog?category=concurrency","className":"inline-flex items-center text-sm font-medium text-primary transition-colors hover:text-primary/80","children":["Read all in ","Concurrency","$L42"]}]]}]}]
21:["$","$L43",null,{}]
22:["$","span","code-segment-45",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["}"]}]
23:["$","span","code-segment-34",{"className":"token string-interpolation","style":{"color":"hsl(95, 38%, 62%)"},"children":["\""]}]
24:["$","span","code-segment-35",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}]
25:["$","span","code-segment-36",{"className":"$undefined","style":{},"children":["\n"]}]
26:["$","span","code-segment-37",{"className":"$undefined","style":{},"children":["    "]}]
27:["$","span","code-segment-38",{"className":"token","style":{"color":"hsl(286, 60%, 67%)"},"children":["return"]}]
28:["$","span","code-segment-39",{"className":"$undefined","style":{},"children":[" "]}]
29:["$","span","code-segment-40",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["{"]}]
2a:["$","span","code-segment-41",{"className":"token","style":{"color":"hsl(95, 38%, 62%)"},"children":["\"ok\""]}]
2b:["$","span","code-segment-42",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[":"]}]
2c:["$","span","code-segment-43",{"className":"$undefined","style":{},"children":[" "]}]
2d:["$","span","code-segment-44",{"className":"token","style":{"color":"hsl(29, 54%, 61%)"},"children":["False"]}]
2e:["$","span","code-segment-45",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[","]}]
2f:["$","span","code-segment-46",{"className":"$undefined","style":{},"children":[" "]}]
30:["$","span","code-segment-47",{"className":"token","style":{"color":"hsl(95, 38%, 62%)"},"children":["\"reason\""]}]
31:["$","span","code-segment-48",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[":"]}]
32:["$","span","code-segment-49",{"className":"$undefined","style":{},"children":[" "]}]
33:["$","span","code-segment-50",{"className":"token","style":{"color":"hsl(95, 38%, 62%)"},"children":["\"delivery_failed\""]}]
34:["$","span","code-segment-51",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["}"]}]
35:["$","span","code-segment-41",{"className":"$undefined","style":{},"children":["\n"]}]
36:["$","span","code-segment-42",{"className":"$undefined","style":{},"children":["    task"]}]
37:["$","span","code-segment-43",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}]
38:["$","span","code-segment-44",{"className":"$undefined","style":{},"children":["add_done_callback"]}]
39:["$","span","code-segment-45",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["("]}]
3a:["$","span","code-segment-46",{"className":"$undefined","style":{},"children":["_background_tasks"]}]
3b:["$","span","code-segment-47",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":["."]}]
3c:["$","span","code-segment-48",{"className":"$undefined","style":{},"children":["discard"]}]
3d:["$","span","code-segment-49",{"className":"token","style":{"color":"hsl(220, 14%, 71%)"},"children":[")"]}]
3e:["$","span","code-segment-50",{"className":"$undefined","style":{},"children":["\n"]}]
3f:["$","span","code-segment-51",{"className":"$undefined","style":{},"children":["    "]}]
40:["$","span","code-segment-52",{"className":"token","style":{"color":"hsl(286, 60%, 67%)"},"children":["return"]}]
41:["$","span","code-segment-53",{"className":"$undefined","style":{},"children":[" task"]}]
42:["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-arrow-right ml-2 h-4 w-4","aria-hidden":"true","children":[["$","path","1ays0h",{"d":"M5 12h14"}],["$","path","xquz4c",{"d":"m12 5 7 7-7 7"}],"$undefined"]}]
b:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
44:I[94060,["/_next/static/chunks/316a3a63422f35de.js"],"IconMark"]
9:null
d:[["$","title","0",{"children":"Fire-and-Forget asyncio.create_task Is a Reliability Trap — Bridgestack"}],["$","meta","1",{"name":"description","content":"An unawaited `create_task` looks identical to a properly-handled background task — until the day it raises an exception, your endpoint returns 200, and nobody knows the notification never went out. Failures must surface somewhere, or they don't exist."}],["$","meta","2",{"name":"generator","content":"v0.app"}],["$","meta","3",{"property":"og:title","content":"Bridgestack — custom software, flat prices from $9.99"}],["$","meta","4",{"property":"og:description","content":"Talk to Tom, your AI PM. A fleet of AI agents builds your product. Flat one-time price. 7 days to test before you pay. Source code is yours."}],["$","meta","5",{"property":"og:url","content":"https://www.bridgestack.systems"}],["$","meta","6",{"property":"og:site_name","content":"Bridgestack"}],["$","meta","7",{"property":"og:locale","content":"en_US"}],["$","meta","8",{"property":"og:image","content":"https://www.bridgestack.systems/bridgestack-landscape-1200x628.png"}],["$","meta","9",{"property":"og:image:width","content":"1200"}],["$","meta","10",{"property":"og:image:height","content":"628"}],["$","meta","11",{"property":"og:type","content":"website"}],["$","meta","12",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","13",{"name":"twitter:title","content":"Bridgestack — custom software, flat prices from $9.99"}],["$","meta","14",{"name":"twitter:description","content":"Talk to Tom, your AI PM. A fleet of AI agents builds your product. 7 days to test before you pay. Source code is yours."}],["$","meta","15",{"name":"twitter:image","content":"https://www.bridgestack.systems/bridgestack-landscape-1200x628.png"}],["$","link","16",{"rel":"icon","href":"/icon-light-32x32.png","media":"(prefers-color-scheme: light)"}],["$","link","17",{"rel":"icon","href":"/icon-dark-32x32.png","media":"(prefers-color-scheme: dark)"}],["$","link","18",{"rel":"icon","href":"/icon.svg","type":"image/svg+xml"}],["$","link","19",{"rel":"apple-touch-icon","href":"/apple-icon.png"}],["$","$L44","20",{}]]
