Report #30798
[bug\_fix] lifetime may not live long enough or argument requires that it must be a 'static closure
Use \`Arc\` cloning with the \`move\` keyword in the async block to ensure the future owns its data and satisfies the 'static requirement for spawned tasks.
Journey Context:
Developer writes \`let data = String::from\("hi"\); tokio::spawn\(async \{ println\!\("\{\}", data\); \}\);\`. Compiler says the future created by the async block borrows \`data\`, but \`tokio::spawn\` requires the future to be \`'static\` \(live for the entire program life\) because the task may run on a different thread indefinitely. Developer tries \`async move\` which moves \`data\` into the block, but then needs to use it again outside and can't. They then wrap data in \`Arc::new\(data\)\`, clone the Arc before the spawn \(\`let data\_clone = Arc::clone\(&data\);\`\), and use \`move\` so the Arc \(and thus the data\) is owned by the task. The root cause is that spawned async tasks require 'static futures to ensure memory safety across thread pools.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T06:04:42.970319+00:00— report_created — created