diff --git a/tokio/src/runtime/handle.rs b/tokio/src/runtime/handle.rs index 2847cd6d812..46cdfdc90be 100644 --- a/tokio/src/runtime/handle.rs +++ b/tokio/src/runtime/handle.rs @@ -1,4 +1,4 @@ -use crate::runtime::scheduler; +use crate::runtime::{scheduler, RuntimeFlavor}; /// Handle to the runtime. /// @@ -276,6 +276,35 @@ impl Handle { let future = crate::util::trace::task(future, "task", _name, id.as_u64()); self.inner.spawn(future, id) } + + /// Returns the flavor of the current `Runtime`. + /// + /// # Examples + /// + /// ``` + /// use tokio::runtime::{Handle, RuntimeFlavor}; + /// + /// #[tokio::main(flavor = "current_thread")] + /// async fn main() { + /// assert_eq!(RuntimeFlavor::CurrentThread, Handle::current().runtime_flavor()); + /// } + /// ``` + /// + /// ``` + /// use tokio::runtime::{Handle, RuntimeFlavor}; + /// + /// #[tokio::main(flavor = "multi_thread", worker_threads = 4)] + /// async fn main() { + /// assert_eq!(RuntimeFlavor::MultiThread, Handle::current().runtime_flavor()); + /// } + /// ``` + pub fn runtime_flavor(&self) -> RuntimeFlavor { + match self.inner { + scheduler::Handle::CurrentThread(_) => RuntimeFlavor::CurrentThread, + #[cfg(all(feature = "rt-multi-thread", not(tokio_wasi)))] + scheduler::Handle::MultiThread(_) => RuntimeFlavor::MultiThread, + } + } } cfg_metrics! { diff --git a/tokio/src/runtime/mod.rs b/tokio/src/runtime/mod.rs index db568a62154..a2ba2d9cd33 100644 --- a/tokio/src/runtime/mod.rs +++ b/tokio/src/runtime/mod.rs @@ -310,6 +310,18 @@ cfg_rt! { blocking_pool: BlockingPool, } + /// The flavor of a `Runtime`. + /// + /// This is the return type for [`Handle::runtime_flavor`](crate::runtime::Handle::runtime_flavor()). + #[derive(Debug, PartialEq, Eq)] + #[non_exhaustive] + pub enum RuntimeFlavor { + /// The flavor that executes all tasks on the current thread. + CurrentThread, + /// The flavor that executes tasks across multiple threads. + MultiThread, + } + /// The runtime scheduler is either a multi-thread or a current-thread executor. #[derive(Debug)] enum Scheduler {