INNER CODE UNIT · Rust
spawn_state_listener
owu/wsl-dashboard · src/app/tasks/mod.rs:76
pub fn spawn_state_listener(app_handle: slint::Weak<AppWindow>, app_state: Arc<Mutex<AppState>>) {
tokio::spawn(async move {
let mut last_refresh = std::time::Instant::now();
const MIN_REFRESH_INTERVAL: std::time::Duration = std::time::Duration::from_millis(1000);
loop {
{
let lock_timeout = std::time::Duration::from_millis(500);
let state_changed = match tokio::time::timeout(lock_timeout, app_state.lock()).await {
Ok(state) => state.wsl_dashboard.state_changed().clone(),
Err(_) => {
tokio::time::sleep(std::time::Duration::from_millis(100)).await;
continue;
}
};
state_changed.notified().await;
}