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
use crate::task::{Task, TaskLocalsWrapper};

/// Returns a handle to the current task.

///

/// # Panics

///

/// This function will panic if not called within the context of a task created by [`block_on`],

/// [`spawn`], or [`Builder::spawn`].

///

/// [`block_on`]: fn.block_on.html

/// [`spawn`]: fn.spawn.html

/// [`Builder::spawn`]: struct.Builder.html#method.spawn

///

/// # Examples

///

/// ```

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

/// #

/// use async_std::task;

///

/// println!("The name of this task is {:?}", task::current().name());

/// #

/// # })

/// ```

pub fn current() -> Task {
    TaskLocalsWrapper::get_current(|t| t.task().clone())
        .expect("`task::current()` called outside the context of a task")
}