我正在尝试使一些代码最多运行 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
调用恢复执行。我敢肯定,我错过了一些东西,但是我真的无法弄清楚。