#async #async-task #run-time #dispatcher #task-scheduling #pluggable #scheduler

async-dispatcher

async runtime based on a pluggable dispatcher

3 releases

0.1.2 May 31, 2024
0.1.1 May 31, 2024
0.1.0 May 31, 2024

#1083 in Asynchronous

Download history 1657/week @ 2024-09-02 1533/week @ 2024-09-09 1678/week @ 2024-09-16 1511/week @ 2024-09-23 1526/week @ 2024-09-30 1485/week @ 2024-10-07 1376/week @ 2024-10-14 1338/week @ 2024-10-21 1574/week @ 2024-10-28 1386/week @ 2024-11-04 1655/week @ 2024-11-11 1809/week @ 2024-11-18 1560/week @ 2024-11-25 1668/week @ 2024-12-02 1513/week @ 2024-12-09 1414/week @ 2024-12-16

6,305 downloads per month
Used in 5 crates (4 directly)

Apache-2.0

8KB
166 lines

Async Dispatcher

crates.io version docs CI

This crate allows async libraries to spawn tasks and set timers without being tied to a particular async runtime.

The core of this need comes from wanting to be able to use the native OS scheduler, as written about in Zed Decoded: Async Rust.

Libraries can spawn in a generic way:

use async_dispatcher::{spawn, sleep};

pub async my_library_function() {
    let task = spawn(async {
        sleep(Duration::from_secs(1)).await;
        println!("in a spawned task!");
    });

    // ...
}

Applications using those libraries can control how that work is dispatched by implementing the Dispatcher trait:

use async_dispatcher::{set_dispatcher, Dispatcher, Runnable};

struct MyAppDispatcher;

impl Dispatcher for MyAppDispatcher {
    fn dispatch(&self, runnable: Runnable) {
        // ...
    }

    fn dispatch_after(&self, duration: Duration, runnable: Runnable) {
        // ...
    }
}

fn main() {
    set_dispatcher(MyAppDispatcher);

    async_dispatcher::block_on(async move {
        my_library_function().await;
    });
}

Dependencies

~345–475KB