aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/spawner.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/spawner.rs')
-rw-r--r--src/runtime/spawner.rs27
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),
}
}