From c1ec6f61815a292a01466a689caca26cc79ed8e9 Mon Sep 17 00:00:00 2001 From: Filip Tibell Date: Wed, 16 Aug 2023 22:51:40 -0500 Subject: [PATCH] Add api for scheduling plain futures in scheduler --- src/lune/scheduler/impl_async.rs | 18 ++++++++++++++++++ src/lune/scheduler/impl_runner.rs | 2 +- src/lune/scheduler/mod.rs | 1 + 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 src/lune/scheduler/impl_async.rs diff --git a/src/lune/scheduler/impl_async.rs b/src/lune/scheduler/impl_async.rs new file mode 100644 index 0000000..4b2d279 --- /dev/null +++ b/src/lune/scheduler/impl_async.rs @@ -0,0 +1,18 @@ +use futures_util::Future; + +use super::SchedulerImpl; + +impl SchedulerImpl { + /** + Schedules a plain future to run whenever the scheduler is available. + */ + pub fn schedule_future(&self, fut: F) + where + F: Future + 'static, + { + self.futures + .try_lock() + .expect("Failed to lock futures queue") + .push(Box::pin(fut)) + } +} diff --git a/src/lune/scheduler/impl_runner.rs b/src/lune/scheduler/impl_runner.rs index 80e21e0..0299ad1 100644 --- a/src/lune/scheduler/impl_runner.rs +++ b/src/lune/scheduler/impl_runner.rs @@ -63,7 +63,7 @@ impl SchedulerImpl { let mut futs = self .futures .try_lock() - .expect("Failed to lock futures for resumption"); + .expect("Failed to lock futures queue"); while futs.next().await.is_some() { resumed_any = true; if self.has_thread() { diff --git a/src/lune/scheduler/mod.rs b/src/lune/scheduler/mod.rs index 0ada0c2..3df4a89 100644 --- a/src/lune/scheduler/mod.rs +++ b/src/lune/scheduler/mod.rs @@ -14,6 +14,7 @@ mod state; mod thread; mod traits; +mod impl_async; mod impl_runner; mod impl_threads;