我怎样才能使运行代码超时?

时间:2019-04-04 12:40:43

标签: rust rust-tokio

我正在尝试使一些代码最多运行 timeout个周期。换句话说,我想要一段代码在给定的时间限制内完成或被中断。

将要运行的具体代码将是一个多部分的http请求,如果请求未在一定时间范围内完成,我想终止该请求。我已经尝试过Timeou板条箱中的tokio-timer,但遇到了一些问题。

use futures::future;

use std::time::Duration;

use tokio::io::Error;
use tokio::prelude::*;
use tokio::runtime::current_thread::Runtime;

fn main() {
    let timeout: u64 = 1000;

    let mut runtime = Runtime::new().unwrap();
    let req_timeout = future::lazy(|| -> Result<String, Error> {
        println!("Start expensive");
        loop {
            //some expensive task
        }
        Ok("finished task".to_string())
    })
    .timeout(Duration::from_millis(timeout));

    let result = runtime.block_on(req_timeout);

    match result {
        Ok(_str) => println!("Task finished"),
        Err(_) => println!("Task interupted"),
    }
}

当前,超时永远不会触发使loop永远执行,而不是被中断并从block_on调用恢复执行。我敢肯定,我错过了一些东西,但是我真的无法弄清楚。

0 个答案:

没有答案