我有一个函数,试图调用一些服务,其中一个(外部服务)有很多问题,从来没有给予任何答案,我想杀死它后,一定的时间。
我想找到任何一个可以设置函数调用超时的板条箱。但是我找不到一个?
fn main() {
let result = retry::retry(Fixed::from_millis(3000).take(5), || {
let possibly_return = function_maybe_never_return();
match possibly_return {
Ok(kubeconfig) => OperationResult::Ok(kubeconfig),
Err(err) => Err(err)
}
});
match result {
Ok(downloaded) => info!("OK !!")
Err(e) => Error!("Unable to ... after many retries {:?}", e),
};
}
fn function_maybe_never_return(){
}
我想在它上面使用retry crate来重试操作。
1条答案
按热度按时间gr8qqesn1#
如果你有一个像时雄这样的异步运行时,你可以。我有一个类似的需求。我有一个阻塞函数,我需要在设置超时后取消。下面是我是如何做到的。
这里,长时间运行的阻塞函数将在
tokio::spawn_blocking
中调用,而tokio::spawn_blocking
又进一步 Package 在tokio::time::timeout()
中,因此当超过截止日期时,long_running_function
将因Deadline错误而终止。我相信还有其他更好的方法,这就是我如何让它为我的用例工作的,因为我已经在异步代码库上工作了。