pub fn spawn<F, S>(future: F, schedule: S) -> (Runnable, Task<F::Output>)
Expand description
Creates a new task.
The returned Runnable
is used to poll the future
, and the Task
is
used to await its output.
Method run()
polls the task’s future once. Then, the
Runnable
vanishes and only reappears when its Waker
wakes the task,
thus scheduling it to be run again.
When the task is woken, its Runnable
is passed to the schedule
function. The schedule
function should not attempt to run the Runnable
nor to drop it. Instead, it should push it into a task queue so that it can
be processed later.
If you need to spawn a future that does not implement Send
or isn’t
'static
, consider using spawn_local()
or spawn_unchecked()
instead.
If you need to attach arbitrary data to the task, consider using
spawn_with()
.
§Examples
// The future inside the task.
let future = async {
println!("Hello, world!");
};
// A function that schedules the task when it gets woken up.
let (s, r) = flume::unbounded();
let schedule = move |runnable| s.send(runnable).unwrap();
// Create a task with the future and the schedule function.
let (runnable, task) = async_task_ffi::spawn(future, schedule);