rust tokio中Future的使用疑惑

发布于 2022-09-11 19:32:49 字数 1178 浏览 21 评论 0

使用tokio时把hyper client发送get请求,为什么第一种方法可以直接返回,第二种方法却一直阻塞!

方法一:

//main方法

tokio::run(lazy(|| {
        let url = String::from("http://www.baidu.com").parse::<hyper::Uri>().unwrap();
        let client = Client::new().get(url).map_err(|_| ProcessError::GetRequestError).and_then(|res| {
            println!("{}",res.status());
            return future::ok(());    
        }).map_err(|_| ());
        return client;
    }));

第二种方法

impl Future for DocumentBuilder {
    type Item = RcDom;
    type Error = ProcessError;
    fn poll(&mut self) -> Poll<Self::Item,Self::Error> {
        let response = self.client.get(self.uri.clone());
        let body = response.wait();
        if body.is_ok() {
            println!("is ok!");
        } else {
            println!("err");
        }
        panic!("..");
    }
}
tokio::run(lazy(|| {
        let document = DocumentBuilder::new("https://www.baidu.com").unwrap().map_err(|err| {
            println!("{:?}",err);
        }).map(|_| {
            println!("..");
        });
        return document;
    }));

第二种方法为什么不能panic,而是一直wait

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

弥枳 2022-09-18 19:32:49
use futures::{Future, Poll};
use hyper::{client::ResponseFuture, Client, Uri};

struct MyFuture {
    future: ResponseFuture,
}

impl MyFuture {
    fn new() -> MyFuture {
        MyFuture {
            future: Client::new().get(Uri::from_static("http://www.baidu.com")),
        }
    }
}

impl Future for MyFuture {
    type Item = <ResponseFuture as Future>::Item;
    type Error = <ResponseFuture as Future>::Error;

    fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
        self.future.poll()
    }
}

fn main() {
    let fut = MyFuture::new();
    tokio::run(fut.map_err(|_| ()).map(|res| {
        println!("res: {:?}", res);
    }));
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文