#web-worker #async-task #task-execution #web-apps #future #worker-thread

async_wasm_task

通过WebAssembly在Rust中管理异步任务并发性

5个版本

0.2.3 2023年10月8日
0.2.2 2023年10月7日
0.2.1 2023年10月7日
0.2.0 2023年10月7日
0.1.0 2023年10月6日

WebAssembly中排名#322

每月下载33

MIT许可协议

28KB
328 代码行

async_wasm_task

Crates.io Documentation License

bandicam 2023-10-07 17-34-36-577

Rust-In-Flutter测试

async_wasm_task是一个Rust库,它提供了一个API来管理JavaScript环境中的异步任务和Rust Future,这与熟悉的tokio::task模式非常相似。它旨在允许异步Rust代码与JavaScript无缝协作,利用Web Worker进行并行任务执行。

专注于wasm32-unknown-unknown目标,这个库假设您正在使用wasm-pack编译您的Rust项目。它使用与原始Web Worker创建相同的JavaScript文件启动并行Web Worker(线程),因此您可能不需要自己处理JavaScript代码。

Web Worker的数量会自动调整,以适应由spawn_blocking队列的并行任务。有关详细信息,请参阅文档。

功能

  • 熟悉的API:如果您熟悉tokio::task,那么您会感觉在async_wasm_task中如鱼得水。它提供了类似的功能,并遵循相同的模式来创建和管理异步任务。

  • Web Worker集成async_wasm_task通过底层使用Web Worker来适应JavaScript环境。这意味着您可以在Web应用程序中编写并发且高效运行的Rust代码。

  • 启动异步和阻塞任务:您可以启动异步和阻塞任务。异步任务允许您执行非阻塞操作,而阻塞任务适用于计算密集型或同步任务。

用法

将此库添加到您的Cargo.toml

[dependencies]
async_wasm_task = "[latest-version]"

以下是如何使用async_wasm_task的简单示例

use async_wasm_task::{spawn, spawn_blocking, yield_now};

async fn start() {
    let async_join_handle = spawn(async {
        // Your asynchronous code here.
        // This will run concurrently
        // in the same web worker(thread).
    });
    let blocking_join_handle = spawn_blocking(|| {
        // Your blocking code here.
        // This will run parallelly
        // in the external pool of web workers.
    });
    let async_result = async_join_handle.await;
    let blocking_result = blocking_join_handle.await;
    for i in 1..1000 {
        // Some repeating task here
        // that shouldn't block the JavaScript runtime.
        yield_now().await;
    }
}

文档

详细文档可在docs.rs上找到。

贡献

欢迎贡献!如果您有任何建议、错误报告或想要为async_wasm_task的开发做出贡献,请打开一个issue或提交一个pull request。

依赖项

~6.5–9MB
~172K SLoC