小编orc*_*rcy的帖子

指定 Rust 闭包生命周期

我正在制作执行器/反应器,同时发现这是一个终生的问题。它与 async/Future 无关,可以在没有 async 糖的情况下进行复制。

use std::future::Future;

struct Runtime;

fn start_with_runtime<C, F>(closure: C)
where
    C: for<'a> FnOnce(&'a Runtime) -> F,
    F: Future
{
    let rt = Runtime;
    let _future = closure(&rt);
    // block_on(future); 
}

async fn async_main(_rt: &Runtime) {
    // I can use _rt to do async stuff here
}

fn main() {
    start_with_runtime(|rt| { async_main(rt) });
}
Run Code Online (Sandbox Code Playgroud)

我想start_with_runtime()运行未来并提供异步运行时引用作为参数。

它不编译:

error: lifetime may not live long enough
  --> src/main.rs:17:31
   |
17 |     start_with_runtime(|rt| { async_main(rt) });
   |                         --- …
Run Code Online (Sandbox Code Playgroud)

closures lifetime rust

10
推荐指数
1
解决办法
778
查看次数

标签 统计

closures ×1

lifetime ×1

rust ×1