atomr_core/actor/scheduler/
mod.rs1mod 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
14pub 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
29pub 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}