use crate::task::{self, JoinHandle}; /// Spawns a blocking task. /// /// The task will be spawned onto a thread pool specifically dedicated to blocking tasks. This /// is useful to prevent long-running synchronous operations from blocking the main futures /// executor. /// /// See also: [`task::block_on`], [`task::spawn`]. /// /// [`task::block_on`]: fn.block_on.html /// [`task::spawn`]: fn.spawn.html /// /// # Examples /// /// Basic usage: /// /// ``` /// # #[cfg(feature = "unstable")] /// # async_std::task::block_on(async { /// # /// use async_std::task; /// /// task::spawn_blocking(|| { /// println!("long-running task here"); /// }) /// .await; /// # /// # }) /// ``` #[cfg_attr(feature = "docs", doc(cfg(unstable)))] #[inline] pub fn spawn_blocking(f: F) -> JoinHandle where F: FnOnce() -> T + Send + 'static, T: Send + 'static, { task::spawn(blocking::unblock(f)) }