forked from mirror/async-std
44 lines
1 KiB
Rust
44 lines
1 KiB
Rust
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();
|
|
}
|