Skip to main content

atomr_core/actor/scheduler/
mod.rs

1//! Scheduler — timers backing `schedule_once` / `schedule_at_fixed_rate`.
2
3mod hashed_wheel;
4mod tokio_scheduler;
5
6pub use hashed_wheel::HashedWheelTimerScheduler;
7pub use tokio_scheduler::TokioScheduler;
8
9use std::sync::Arc;
10use std::time::Duration;
11
12use futures_util::future::BoxFuture;
13
14/// A handle that can cancel a pending scheduled action.
15pub struct SchedulerHandle {
16    pub(crate) cancel: Arc<std::sync::atomic::AtomicBool>,
17}
18
19impl SchedulerHandle {
20    pub fn cancel(&self) {
21        self.cancel.store(true, std::sync::atomic::Ordering::Release);
22    }
23
24    pub fn is_cancelled(&self) -> bool {
25        self.cancel.load(std::sync::atomic::Ordering::Acquire)
26    }
27}
28
29/// The scheduler trait.
30pub trait Scheduler: Send + Sync {
31    fn schedule_once(&self, delay: Duration, task: BoxFuture<'static, ()>) -> SchedulerHandle;
32
33    fn schedule_at_fixed_rate(
34        &self,
35        initial_delay: Duration,
36        interval: Duration,
37        task: Arc<dyn Fn() + Send + Sync>,
38    ) -> SchedulerHandle;
39}