pub mod blocklist_poller;
pub mod maintenance;
use std::sync::Arc;
use tokio::task::JoinHandle;
use tokio_util::sync::CancellationToken;
use crate::App;
pub struct Tasks {
handles: Vec<JoinHandle<()>>,
}
pub fn spawn(
app: Arc<App>,
shutdown: CancellationToken,
watcher: blocklist_poller::Watcher,
delivery: Vec<JoinHandle<()>>,
) -> Tasks {
let mut handles = vec![
tokio::spawn(blocklist_poller::run(
Arc::clone(&app),
shutdown.clone(),
watcher,
)),
tokio::spawn(maintenance::run(app, shutdown)),
];
handles.extend(delivery);
Tasks { handles }
}
impl Tasks {
#[cfg(feature = "test-support")]
pub fn count(&self) -> usize {
self.handles.len()
}
pub async fn join(self) {
for handle in self.handles {
let _ = handle.await;
}
}
}