async Lifetimes
(Jin Qing’s Column, Sep., 2024)
From: https://rust-lang.github.io/async-book/03_async_await/01_chapter.html
The Future’s lifetime is bounded by the parameter’s.
// This function:
async fn borrow_x(x: &u8) -> u8 { *x }
// Is equivalent to this function:
fn borrow_x_expanded<'a>(x: &'a u8) -> impl Future<Output = u8> + 'a {
async move { *x }
}
Change non-static lifetime to static lifetime:
fn bad() -> impl Future<Output = u8> {
let x = 5;
borrow_x(&x) // ERROR: `x` does not live long enough
}
fn good() -> impl Future<Output = u8> {
async {
let x = 5;
borrow_x(&x).await
}
}