rust 返回 impl Future 的三种写法。

原创
2020/06/03 14:30
阅读数 449
use futures::{future, Future};
use futures::future::{FutureExt, Ready};
use std::result::Result;
use std::error::Error;

// 返回 impl Future 的三种写法
async fn f() -> Result<usize, Box<dyn Error>> {
    if false {
        let a: Ready<Result<usize, Box<dyn Error>>> = futures::future::ok(1);
        let b = a.map(|x| Ok(x.unwrap() + 1));
        b.await
    } else if true {
        async{1}.map(|x|Ok(x+1)).await
    } else {
        let a = async {1};
        let b = a.map(|x|Ok(x+1));
        b.await
        // then() 的使用:
        // b.then(|x:Result<usize, Box<dyn Error>>| async {Ok(x.unwrap()+1)}).await
    }
}

fn main() {
    let a = f();
    let c = futures::executor::block_on(a);
    println!("{}", c.unwrap());

}

自动推导的类型如截图:

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部