繁体   English   中英

A Rust function 返回一个future,after.await(),可能会引发恐慌。? 我怎样才能避免恐慌! 停止程序?

[英]A Rust function return a future, after .await(), it may be throw a panic!. How can I avoid the panic! to stop the program?

我正在制作 function call_data() ,它将返回一个未来。 在主 function 中,我使用 tokio 任务每 60 秒永久调用call_data() 有时, call_data() .await 是一个错误,所以会出现恐慌。 并停止程序。 我尝试let a = call_data("name", "table").await; , 然后使用match ,如果Ok ,future 被执行,如果Error ,继续。 但是,如果有恐慌,那是行不通的。 仍然抛出恐慌? 我有什么办法可以避免恐慌! 这个程序? 下面是我不使用匹配的代码!

async fn main() {
    let forever = task::spawn(async {
        let mut interval = interval(Duration::from_millis(60000));
        println!("Start");
        loop {
            interval.tick().await;
            call_data("name", "table").await;
        }
    });
    forever.await;
}

async fn call_data(name:&str, table: &str){
    data().unwrap();
}

这是我使用match的代码

async fn main() {
        let forever = task::spawn(async {
            let mut interval = interval(Duration::from_millis(60000));
            println!("Start");
            loop {
                let a =call_data("BTC-USD", "test3").await;
                match a{
                      Ok=>(),
                      Err=>continue,
                 }
            }
        });
        forever.await;
    }
    
    async fn call_data(name:&str, table: &str){
        data().unwrap();
    }

您的 fn call_data应该类似于

async fn call_data(name: &str, table: &str) -> std::result::Result<Data, Box<dyn error::Error>> {
    Ok(Data {})
}

match应该看起来像

match call_data("", "").await {
    Ok(data) => {
        // do something with data
    },
    Err(e) => println!("Error: {:?}", e),
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM