Struct grafix_toolbox::uses::asyn::Task [−]
pub struct Task<T> { /* fields omitted */ }Expand description
A spawned task.
A Task can be awaited to retrieve the output of its future.
Dropping a Task cancels it, which means its future won’t be polled again. To drop the
Task handle without canceling it, use detach() instead. To cancel a
task gracefully and wait until it is fully destroyed, use the cancel()
method.
Note that canceling a task actually wakes it and reschedules one last time. Then, the executor
can destroy the task by simply dropping its [Runnable][super::Runnable] or by invoking
[run()][super::Runnable::run()].
Examples
use smol::{future, Executor};
use std::thread;
let ex = Executor::new();
// Spawn a future onto the executor.
let task = ex.spawn(async {
println!("Hello from a task!");
1 + 2
});
// Run an executor thread.
thread::spawn(move || future::block_on(ex.run(future::pending::<()>())));
// Wait for the task's output.
assert_eq!(future::block_on(task), 3);Implementations
impl<T> Task<T>
impl<T> Task<T>
pub fn detach(self)
pub fn detach(self)
Detaches the task to let it keep running in the background.
Examples
use smol::{Executor, Timer};
use std::time::Duration;
let ex = Executor::new();
// Spawn a deamon future.
ex.spawn(async {
loop {
println!("I'm a daemon task looping forever.");
Timer::after(Duration::from_secs(1)).await;
}
})
.detach();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 smol::{future, Executor, Timer};
use std::thread;
use std::time::Duration;
let ex = Executor::new();
// Spawn a deamon future.
let task = ex.spawn(async {
loop {
println!("Even though I'm in an infinite loop, you can still cancel me!");
Timer::after(Duration::from_secs(1)).await;
}
});
// Run an executor thread.
thread::spawn(move || future::block_on(ex.run(future::pending::<()>())));
future::block_on(async {
Timer::after(Duration::from_secs(3)).await;
task.cancel().await;
});Trait Implementations
Blanket Implementations
Mutably borrows from an owned value. Read more
A convenience for calling Future::poll() on !Unpin types.
Returns the result of self or other future, preferring self if both are ready. Read more
Returns the result of self or other future, with no preference if both are ready. Read more
fn catch_unwind(self) -> CatchUnwind<Self>ⓘ where
Self: UnwindSafe,
fn catch_unwind(self) -> CatchUnwind<Self>ⓘ where
Self: UnwindSafe,
Catches panics while polling the future. Read more
Boxes the future and changes its type to dyn Future + Send + 'a. Read more
Boxes the future and changes its type to dyn Future + 'a. Read more
into_future)The output that the future will produce on completion.
type Future = F
type Future = F
into_future)Which kind of future are we turning this into?
into_future)Creates a future from a value.
The inverse inclusion map: attempts to construct self from the equivalent element of its
superset. Read more
pub fn is_in_subset(&self) -> bool
pub fn is_in_subset(&self) -> bool
Checks if self is actually part of its subset T (and can be converted to it).
pub fn to_subset_unchecked(&self) -> SS
pub fn to_subset_unchecked(&self) -> SS
Use with care! Same as self.to_subset but without any property checks. Always succeeds.
pub fn from_subset(element: &SS) -> SP
pub fn from_subset(element: &SS) -> SP
The inclusion map: converts self to the equivalent element of its superset.