pub fn spawn_with<F, S, D>(
future: F,
schedule: S,
data: D,
) -> (Runnable<D>, Task<F::Output>)
Expand description
Creates a new task with associated data.
This function is the same as spawn()
, except it makes it possible to
attach arbitrary data to the task. This makes it possible to benefit from
the single allocation design of async_task_ffi
without having to write a
specialized implementation.
The data can be accessed using Runnable::data
or Runnable::data_mut
.
ยงExamples
use async_task_ffi::Runnable;
// The future inside the task.
let future = async {
println!("Hello, world!");
};
// A function that schedules the task when it gets woken up
// and counts the amount of times it has been scheduled.
let (s, r) = flume::unbounded();
let schedule = move |mut runnable: Runnable<usize>| {
*runnable.data_mut() += 1;
s.send(runnable).unwrap();
};
// Create a task with the future, the schedule function
// and the initial data.
let (runnable, task) = async_task_ffi::spawn_with(future, schedule, 0);