diff options
Diffstat (limited to 'src/runtime/spawner.rs')
-rw-r--r-- | src/runtime/spawner.rs | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/src/runtime/spawner.rs b/src/runtime/spawner.rs index d136945..a37c667 100644 --- a/src/runtime/spawner.rs +++ b/src/runtime/spawner.rs @@ -1,24 +1,34 @@ -cfg_rt_core! { +cfg_rt! { use crate::runtime::basic_scheduler; use crate::task::JoinHandle; use std::future::Future; } -cfg_rt_threaded! { +cfg_rt_multi_thread! { use crate::runtime::thread_pool; } #[derive(Debug, Clone)] pub(crate) enum Spawner { - Shell, - #[cfg(feature = "rt-core")] + #[cfg(feature = "rt")] Basic(basic_scheduler::Spawner), - #[cfg(feature = "rt-threaded")] + #[cfg(feature = "rt-multi-thread")] ThreadPool(thread_pool::Spawner), } -cfg_rt_core! { +impl Spawner { + pub(crate) fn shutdown(&mut self) { + #[cfg(feature = "rt-multi-thread")] + { + if let Spawner::ThreadPool(spawner) = self { + spawner.shutdown(); + } + } + } +} + +cfg_rt! { impl Spawner { pub(crate) fn spawn<F>(&self, future: F) -> JoinHandle<F::Output> where @@ -26,10 +36,9 @@ cfg_rt_core! { F::Output: Send + 'static, { match self { - Spawner::Shell => panic!("spawning not enabled for runtime"), - #[cfg(feature = "rt-core")] + #[cfg(feature = "rt")] Spawner::Basic(spawner) => spawner.spawn(future), - #[cfg(feature = "rt-threaded")] + #[cfg(feature = "rt-multi-thread")] Spawner::ThreadPool(spawner) => spawner.spawn(future), } } |