我有一个 Rust 函数(不是我编写的),调用它会在几毫秒内返回结果,或者在 ~10 分钟后失败。
我想要封装这个函数调用,并返回一个 `Option`。如果函数运行时间超过 10 秒,则返回 `None`;如果函数运行时间小于 10 秒,则返回运行结果。但是一旦该函数被调用,我找不到中断其评估的任何方法。
例如:
我想要封装这个函数调用,并返回一个 `Option`。如果函数运行时间超过 10 秒,则返回 `None`;如果函数运行时间小于 10 秒,则返回运行结果。但是一旦该函数被调用,我找不到中断其评估的任何方法。
例如:
// This is the unpredictable function
fn f() {
// Wait randomly for between 0 and 10 seconds
let mut rng = rand::thread_rng();
std::thread::sleep(std::time::Duration::from_secs(rng.gen_range(0, 10)));
}
fn main() {
for _ in 0..100 {
// Run f() here but so that the whole loop takes no more than 100 seconds
// by aborting f() if it takes longer than 1 second
}
}
我找到了一些使用带有超时的futures的方法,但是我想尽量减少开销,并且我不确定针对每次调用该函数都创建一个future会有多大的代价,因为它将被调用很多次。
谢谢