pub fn poll_with_timeout<F, T, E>(
operation: F,
timeout: Duration,
poll_interval: Duration,
) -> Result<Option<T>, PollError<E>>Expand description
Poll with timeout for operations that may return a result
Repeatedly calls operation until it returns Ok(Some(T)) or timeout is reached.
§Arguments
operation- Function that returnsOk(Some(T))when complete,Ok(None)to continue pollingtimeout- Maximum duration to waitpoll_interval- Duration to sleep between operation calls
§Returns
Ok(Some(T))when operation returnsOk(Some(T))Ok(None)when timeout is reachedErr(PollError::ConditionError(e))when operation returns an error
§Example
use std::time::Duration;
use rusty_tip::utils::poll_with_timeout;
use rusty_tip::utils::PollError;
// Simple example that finds data after a few attempts
let result = poll_with_timeout(
|| {
static mut ATTEMPTS: u32 = 0;
unsafe {
ATTEMPTS += 1;
if ATTEMPTS >= 3 {
Ok::<Option<Vec<f64>>, &str>(Some(vec![1.0, 2.0, 3.0])) // Return data on 3rd attempt
} else {
Ok(None) // Keep trying
}
}
},
Duration::from_secs(1),
Duration::from_millis(10),
);
assert!(result.is_ok());