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

async-dispatcher

基于可插拔调度器的异步运行时

3个版本

0.1.2 2024年5月31日
0.1.1 2024年5月31日
0.1.0 2024年5月31日

#358 in 异步

Download history 309/week @ 2024-05-29 56/week @ 2024-06-05 827/week @ 2024-06-12 3059/week @ 2024-06-19 2906/week @ 2024-06-26 3096/week @ 2024-07-03 4670/week @ 2024-07-10 2473/week @ 2024-07-17 1951/week @ 2024-07-24 2497/week @ 2024-07-31 1687/week @ 2024-08-07 1676/week @ 2024-08-14

每月 8,121 次下载
用于 2 crates

Apache-2.0

8KB
166

异步调度器

crates.io version docs CI

此crate允许异步库以通用方式启动任务和设置定时器,而无需绑定到特定的异步运行时。

这种需求的核心理念来自于希望能够使用原生操作系统调度器,正如在Zed Decoded: Async Rust中所描述的。

库可以以通用方式spawn

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!");
    });

    // ...
}

使用这些库的应用程序可以通过实现Dispatcher特质来控制工作如何调度

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;
    });
}

依赖项

~330–470KB