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次
28KB
328 代码行
async_wasm_task
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