maycoon_core/tasks/
mod.rs1use crate::tasks::runner::TaskRunner;
2use crate::tasks::task::Task;
3use std::sync::OnceLock;
4
5pub mod runner;
7
8pub mod task;
10
11pub mod waker;
13
14pub mod fetcher;
16
17static RUNNER: OnceLock<TaskRunner> = OnceLock::new();
19
20pub fn try_init(runner: TaskRunner) {
22 RUNNER.get_or_init(move || runner);
23}
24
25#[inline(always)]
29pub fn init(runner: TaskRunner) {
30 RUNNER.set(runner).expect("Task runner already initialized");
31}
32
33#[inline(always)]
36pub fn try_runner<'a>() -> Option<&'a TaskRunner> {
37 RUNNER.get()
38}
39
40#[inline(always)]
44pub fn runner<'a>() -> &'a TaskRunner {
45 RUNNER.get().expect("Task runner not initialized")
46}
47
48#[inline(always)]
53pub fn spawn<Fut>(future: Fut) -> Box<dyn Task<Fut::Output>>
54where
55 Fut: Future + Send + 'static,
56 Fut::Output: Send + 'static,
57{
58 runner().spawn(future)
59}
60
61#[inline(always)]
68#[cfg(native)]
69pub fn spawn_blocking<R, F>(func: F) -> Box<dyn Task<R>>
70where
71 R: Send + 'static,
72 F: FnOnce() -> R + Send + 'static,
73{
74 runner().spawn_blocking(func)
75}
76
77#[inline(always)]
81#[cfg(native)]
82pub fn block_on<Fut>(future: Fut) -> Fut::Output
83where
84 Fut: Future,
85{
86 runner().block_on(future)
87}