maycoon_core/tasks/
mod.rs1use crate::tasks::runner::TaskRunner;
2use std::future::Future;
3use std::sync::OnceLock;
4
5pub use futures::future;
6
7pub mod runner;
9
10pub type TaskHandle<T> = future::RemoteHandle<T>;
12
13static RUNNER: OnceLock<TaskRunner> = OnceLock::new();
14
15pub fn runner<'a>() -> Option<&'a TaskRunner> {
17 RUNNER.get()
18}
19
20pub fn spawn<Fut>(fut: Fut) -> TaskHandle<Fut::Output>
24where
25 Fut: Future + Send + 'static,
26 Fut::Output: Send,
27{
28 runner().expect("Task runner not initialized yet").run(fut)
29}
30
31pub fn block_on<Fut>(fut: Fut) -> Fut::Output
33where
34 Fut: Future,
35{
36 futures::executor::block_on(fut)
37}