生锈一定时间后终止功能



我有一个函数尝试调用一些服务,其中一个(外部服务)有很多问题,并且从不给出任何答案,我想在一段时间后杀死它。

我想找到任何可以设置调用函数超时的板条箱。但是我找不到一个?

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(){

}

我想在其上使用重试箱来重试操作。

如果你有一个像tokio这样的异步运行时,你可以。 我也有类似的要求。我有一个阻止功能,我需要在设定的超时后取消。这是我是如何做到的。

fn long_running_function() -> Result<()> {
std::thread::sleep(std::time::Duration::from_secs(1000));
Ok(())
}
async fn call_long_running_function() {
tokio::time::timeout(std::time::Duration::from_secs(2), tokio::task::spawn_blocking(move ||long_running_function())).await.unwrap()
}

在这里,长时间运行的阻塞函数将在tokio::spawn_blocking内调用,该进一步包装在tokio::time::timeout()中,因此当超过该截止日期时,long_running_function将因截止日期错误而死亡。

我相信还有其他更好的方法。这就是我让它为我的用例工作的方式,因为我已经在处理异步代码库。

最新更新