Crates.io | async-dispatcher |
lib.rs | async-dispatcher |
version | 0.1.2 |
source | src |
created_at | 2024-05-31 19:12:06.393279 |
updated_at | 2024-05-31 20:20:27.404715 |
description | async runtime based on a pluggable dispatcher |
homepage | |
repository | |
max_upload_size | |
id | 1258226 |
size | 19,495 |
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;
});
}