Module task

Module task 

Source
Available on crate feature static only.
Expand description

This code is inspired by the approach in this embedded Rust crate: embassy-executor.

Usage:

#[doc(hidden)]
fn __async_fun() -> impl Future<Output = ()> { ( move || async move {})() }
fn async_fun() {
    const POOL_SIZE: usize = 4;
    static POOL: TaskPoolLayout<{ TaskCapture::<_, _>::size::<POOL_SIZE>(__async_fun) }> = unsafe {
        transmute(TaskCapture::<_,_>::new::<POOL_SIZE>(__async_fun))
    };
    const fn get<F, Args, Fut>(_: F) -> &'static TaskPool<Fut, POOL_SIZE>
    where F: TaskFn<Args, Fut = Fut>, Fut: SafeFuture {
        const {
            assert_eq!(size_of::<TaskPool<Fut, POOL_SIZE>>(), size_of_val(&POOL));
            assert!(align_of::<TaskPool<Fut, POOL_SIZE>>() <= 128);
        }
        unsafe { &*POOL.get().cast() }
    }
    get(__async_fun);
}

Structs§

StaticFuture
TaskCapture
TaskHeader
TaskPool
TaskPoolLayout
TaskSlot

Enums§

State

Traits§

SafeFuture
TaskFn

Type Aliases§

TaskTypeFn