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
use std::future::Future;

use crate::task::{Builder, JoinHandle};

/// Spawns a task.

///

/// This function is similar to [`std::thread::spawn`], except it spawns an asynchronous task.

///

/// [`std::thread`]: https://doc.rust-lang.org/std/thread/fn.spawn.html

///

/// # Examples

///

/// ```

/// # async_std::task::block_on(async {

/// #

/// use async_std::task;

///

/// let handle = task::spawn(async {

///     1 + 2

/// });

///

/// assert_eq!(handle.await, 3);

/// #

/// # })

/// ```

pub fn spawn<F, T>(future: F) -> JoinHandle<T>
where
    F: Future<Output = T> + Send + 'static,
    T: Send + 'static,
{
    Builder::new().spawn(future).expect("cannot spawn task")
}