小编Hex*_*lee的帖子

如何指示异步函数返回值的生命周期与参数相同?

我们可以将普通函数与非静态参数进行匹配,如下所示:

fn processor(data: &i32) -> &i32 {
    data
}

fn process<'b>(data: &'b i32, processor: impl 'static + for<'a> Fn(&'a i32) -> &'a i32) -> &'b i32 {
    processor(data)
}

fn main() {
    let data = 1;
    println!("data: {}", process(&data, processor));
}
Run Code Online (Sandbox Code Playgroud)

由于异步函数返回匿名期货,我们不能指出匿名期货的生命周期与参数相同:

use std::future::Future;

async fn processor(data: &i32) -> &i32 {
    data
}

async fn process<'b, F>(data: &'b i32, processor: impl 'static + Fn(&i32) -> F) -> &'b i32
where
    F: 'b + Future<Output = &'b i32>,
{
    processor(data).await
} …
Run Code Online (Sandbox Code Playgroud)

traits rust async-await

2
推荐指数
1
解决办法
647
查看次数

标签 统计

async-await ×1

rust ×1

traits ×1