Function async_task::spawn_local [−][src]
pub fn spawn_local<F, S>(future: F, schedule: S) -> (Runnable, Task<F::Output>) where
F: Future + 'static,
F::Output: 'static,
S: Fn(Runnable) + Send + Sync + 'static,
Creates a new thread-local task.
This function is same as spawn()
, except it does not require Send
on future
. If the
Runnable
is used or dropped on another thread, a panic will occur.
This function is only available when the std
feature for this crate is enabled.
Examples
use async_task::Runnable; use flume::{Receiver, Sender}; use std::rc::Rc; thread_local! { // A queue that holds scheduled tasks. static QUEUE: (Sender<Runnable>, Receiver<Runnable>) = flume::unbounded(); } // Make a non-Send future. let msg: Rc<str> = "Hello, world!".into(); let future = async move { println!("{}", msg); }; // A function that schedules the task when it gets woken up. let s = QUEUE.with(|(s, _)| s.clone()); let schedule = move |runnable| s.send(runnable).unwrap(); // Create a task with the future and the schedule function. let (runnable, task) = async_task::spawn_local(future, schedule);