pub struct JoinHandle<T> { /* private fields */ }Expand description
An owned permission to join a task (await its termination).
This is equivalent to the standard library’s std::thread::JoinHandle
type, but for asynchronous tasks rather than OS threads.
A JoinHandle detaches the associated task when it is dropped, which
means that there is no longer any handle to the task and no way to await
its termination.
JoinHandles implement Future, so a task’s output can be awaited by
.awaiting its JoinHandle.
This struct is returned by the Scheduler::spawn and
Scheduler::spawn_allocated methods, and the task::Builder::spawn and
task::Builder::spawn_allocated methods.
Implementations§
Source§impl<T> JoinHandle<T>
impl<T> JoinHandle<T>
Sourcepub fn task_ref(&self) -> TaskRef
pub fn task_ref(&self) -> TaskRef
Returns a TaskRef referencing the task this JoinHandle is
associated with.
This increases the task’s reference count; its storage is not
deallocated until all such TaskRefs are dropped.
Sourcepub fn is_complete(&self) -> bool
pub fn is_complete(&self) -> bool
Returns true if this task has completed.
Tasks are considered completed when the spawned Future has returned
Poll::Ready, or if the task has been canceled by the cancel()
method.
Note: This method can return false after cancel() has
been called. This is because calling cancel begins the process of
cancelling a task. The task is not considered canceled until it has been
polled by the scheduler after calling cancel().
Sourcepub fn cancel(&self) -> bool
pub fn cancel(&self) -> bool
Forcibly cancel the task.
Canceling a task sets a flag indicating that it has been canceled and
should terminate. The next time a canceled task is polled by the
scheduler, it will terminate instead of polling the inner Future. If
the task has a JoinHandle, that JoinHandle will complete with a
JoinError. The task then will be deallocated once all
JoinHandles and TaskRefs referencing it have been dropped.
This method returns true if the task was canceled successfully, and
false if the task could not be canceled (i.e., it has already completed,
has already been canceled, cancel culture has gone TOO FAR, et cetera).