我正在尝试让一些代码最多 运行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"),
}
}
Run Code Online (Sandbox Code Playgroud)
目前,超时永远不会触发,让调用loop
永远执行,而不是被中断并从调用中恢复执行block_on
。我确信,我错过了一些东西,但我无法真正弄清楚。