[][src]Struct smol::Task

#[must_use =
  "tasks get canceled when dropped, use `.detach()` to run them in the background"]pub struct Task<T>(_);

A spawned future.

Tasks are also futures themselves and yield the output of the spawned future.

When a task is dropped, its gets canceled and won't be polled again. To cancel a task a bit more gracefully and wait until it stops running, use the cancel() method.

Tasks that panic get immediately canceled. Awaiting a canceled task also causes a panic.

Examples

use async_executor::{Executor, Task};

let ex = Executor::new();

ex.run(async {
    let task = Task::spawn(async {
        println!("Hello from a task!");
        1 + 2
    });

    assert_eq!(task.await, 3);
});

Implementations

impl<T> Task<T>[src]

pub fn spawn(future: impl Send + Future<Output = T> + 'static) -> Task<T>

Important traits for Task<T>

impl<T> Future for Task<T> type Output = T;
where
    T: Send + 'static, 
[src]

Spawns a task onto the current multi-threaded or single-threaded executor.

If called from an Executor (preferred) or from a LocalExecutor, the task is spawned on it.

Otherwise, this method panics.

Examples

use async_executor::{Executor, Task};

let ex = Executor::new();

ex.run(async {
    let task = Task::spawn(async { 1 + 2 });
    assert_eq!(task.await, 3);
});
use async_executor::{LocalExecutor, Task};

let local_ex = LocalExecutor::new();

local_ex.run(async {
    let task = Task::spawn(async { 1 + 2 });
    assert_eq!(task.await, 3);
});

pub fn local(future: impl Future<Output = T> + 'static) -> Task<T>

Important traits for Task<T>

impl<T> Future for Task<T> type Output = T;
where
    T: 'static, 
[src]

Spawns a task onto the current single-threaded executor.

If called from a LocalExecutor, the task is spawned on it.

Otherwise, this method panics.

Examples

use async_executor::{LocalExecutor, Task};

let local_ex = LocalExecutor::new();

local_ex.run(async {
    let task = Task::local(async { 1 + 2 });
    assert_eq!(task.await, 3);
});

pub fn detach(self)[src]

Detaches the task to let it keep running in the background.

Examples

use async_executor::{Executor, Task};
use futures_lite::future;

let ex = Executor::new();

ex.spawn(async {
    loop {
        println!("I'm a background task looping forever.");
        future::yield_now().await;
    }
})
.detach();

ex.run(future::yield_now());

pub async fn cancel(self) -> Option<T>[src]

Cancels the task and waits for it to stop running.

Returns the task's output if it was completed just before it got canceled, or None if it didn't complete.

While it's possible to simply drop the Task to cancel it, this is a cleaner way of canceling because it also waits for the task to stop running.

Examples

use async_executor::{Executor, Task};
use futures_lite::future;

let ex = Executor::new();

let task = ex.spawn(async {
    loop {
        println!("Even though I'm in an infinite loop, you can still cancel me!");
        future::yield_now().await;
    }
});

ex.run(async {
    task.cancel().await;
});

Trait Implementations

impl<T> Debug for Task<T> where
    T: Debug
[src]

impl<T> Future for Task<T>[src]

type Output = T

The type of value produced on completion.

Auto Trait Implementations

impl<T> RefUnwindSafe for Task<T> where
    T: RefUnwindSafe

impl<T> Send for Task<T> where
    T: Send

impl<T> Sync for Task<T>

impl<T> Unpin for Task<T>

impl<T> UnwindSafe for Task<T> where
    T: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T> FutureExt for T where
    T: Future + ?Sized
[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<F, T, E> TryFuture for F where
    F: Future<Output = Result<T, E>> + ?Sized
[src]

type Ok = T

The type of successful values yielded by this future

type Error = E

The type of failures yielded by this future

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.