1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
use std::future::Future; use crate::task::Builder; /// Spawns a task and blocks the current thread on its result. /// /// Calling this function is similar to [spawning] a thread and immediately [joining] it, except an /// asynchronous task will be spawned. /// /// See also: [`task::spawn_blocking`]. /// /// [`task::spawn_blocking`]: fn.spawn_blocking.html /// /// [spawning]: https://doc.rust-lang.org/std/thread/fn.spawn.html /// [joining]: https://doc.rust-lang.org/std/thread/struct.JoinHandle.html#method.join /// /// # Examples /// /// ```no_run /// use async_std::task; /// /// fn main() { /// task::block_on(async { /// println!("Hello, world!"); /// }) /// } /// ``` #[cfg(not(target_os = "unknown"))] pub fn block_on<F, T>(future: F) -> T where F: Future<Output = T>, { Builder::new().blocking(future) } /// Spawns a task and waits for it to finish. #[cfg(target_os = "unknown")] pub fn block_on<F, T>(future: F) where F: Future<Output = T> + 'static, T: 'static, { Builder::new().local(future).unwrap(); }