pub type ShutdownHandle = JoinHandle<()>;
Expand description

A future which awaits the completion of all managed tasks

Aliased Type§

struct ShutdownHandle { /* private fields */ }

Implementations§

source§

impl<T> JoinHandle<T>

source

pub fn abort(&self)

Abort the task associated with the handle.

Awaiting a cancelled task might complete as usual if the task was already completed at the time it was cancelled, but most likely it will fail with a cancelled JoinError.

use tokio::time;

let mut handles = Vec::new();

handles.push(tokio::spawn(async {
   time::sleep(time::Duration::from_secs(10)).await;
   true
}));

handles.push(tokio::spawn(async {
   time::sleep(time::Duration::from_secs(10)).await;
   false
}));

for handle in &handles {
    handle.abort();
}

for handle in handles {
    assert!(handle.await.unwrap_err().is_cancelled());
}
source

pub fn is_finished(&self) -> bool

Checks if the task associated with this JoinHandle has finished.

Please note that this method can return false even if abort has been called on the task. This is because the cancellation process may take some time, and this method does not return true until it has completed.

use tokio::time;

let handle1 = tokio::spawn(async {
    // do some stuff here
});
let handle2 = tokio::spawn(async {
    // do some other stuff here
    time::sleep(time::Duration::from_secs(10)).await;
});
// Wait for the task to finish
handle2.abort();
time::sleep(time::Duration::from_secs(1)).await;
assert!(handle1.is_finished());
assert!(handle2.is_finished());
source

pub fn abort_handle(&self) -> AbortHandle

Returns a new AbortHandle that can be used to remotely abort this task.

Awaiting a task cancelled by the AbortHandle might complete as usual if the task was already completed at the time it was cancelled, but most likely it will fail with a cancelled JoinError.

use tokio::{time, task};

let mut handles = Vec::new();

handles.push(tokio::spawn(async {
   time::sleep(time::Duration::from_secs(10)).await;
   true
}));

handles.push(tokio::spawn(async {
   time::sleep(time::Duration::from_secs(10)).await;
   false
}));

let abort_handles: Vec<task::AbortHandle> = handles.iter().map(|h| h.abort_handle()).collect();

for handle in abort_handles {
    handle.abort();
}

for handle in handles {
    assert!(handle.await.unwrap_err().is_cancelled());
}

Trait Implementations§

source§

impl<T> Debug for JoinHandle<T>where T: Debug,

source§

fn fmt(&self, fmt: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
source§

impl<T> Drop for JoinHandle<T>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl<T> Future for JoinHandle<T>

§

type Output = Result<T, JoinError>

The type of value produced on completion.
source§

fn poll( self: Pin<&mut JoinHandle<T>>, cx: &mut Context<'_> ) -> Poll<<JoinHandle<T> as Future>::Output>

Attempt to resolve the future to a final value, registering the current task for wakeup if the value is not yet available. Read more
source§

impl<T> RefUnwindSafe for JoinHandle<T>

source§

impl<T> Send for JoinHandle<T>where T: Send,

source§

impl<T> Sync for JoinHandle<T>where T: Send,

source§

impl<T> Unpin for JoinHandle<T>

source§

impl<T> UnwindSafe for JoinHandle<T>