14个版本

0.3.3 2022年3月27日
0.3.2 2022年3月24日
0.2.1 2022年2月25日
0.1.7 2021年6月25日
0.1.4 2020年12月29日

#1151异步

Download history 46/week @ 2024-04-22 33/week @ 2024-04-29 40/week @ 2024-05-06 49/week @ 2024-05-13 32/week @ 2024-05-20 49/week @ 2024-05-27 32/week @ 2024-06-03 40/week @ 2024-06-10 33/week @ 2024-06-17 48/week @ 2024-06-24 17/week @ 2024-07-08 59/week @ 2024-07-15 20/week @ 2024-07-22 32/week @ 2024-07-29 37/week @ 2024-08-05

149 每月下载量
13 个开源软件包中(直接使用 9 个) 使用

Apache-2.0

91KB
999

safina-executor

crates.io version license: Apache 2.0 unsafe forbidden pipeline status

异步执行器。

它是 safina 的一部分,一个安全异步运行时。

特性

  • 在线程池上启动异步任务执行。
  • 为阻塞任务在单独的线程池上安排闭包或 FnOnce
  • 支持多个执行器。
  • 禁止(不安全代码)
  • 仅依赖于 std
  • 良好的测试覆盖率(100%)

限制

  • 分配内存
  • 未优化

文档

https://docs.rs/safina-executor

示例

let executor = safina_executor::Executor::default();
let (sender, receiver) = std::sync::mpsc::channel();
executor.spawn(async move {
    sender.send(()).unwrap();
});
receiver.recv().unwrap();
let result = safina_executor::block_on(async {
    prepare_request().await?;
    execute_request().await
})?;
let result = safina_executor::schedule_blocking(|| {
    read_file1()?;
    read_file2()
}).async_recv().await.unwrap()?;

替代方案

更新日志

  • v0.3.3 - 消除“在完成之后恢复”的虚假工作线程恐慌。
  • v0.3.2 - 重导出 safina_sync::Receiversafina_threadpool::NewThreadPoolError
  • v0.3.1 - 使用 safina-async v0.2.1。
  • v0.3.0 - schedule_blocking 返回新的 safina_sync::Receiver
  • v0.2.1 - 更新文档。
  • v0.2.0
    • Executor::newExecutor::with_name 返回 Result
    • 升级到 safina-threadpool v0.2.0。
  • v0.1.7 - block_on 函数接受非 Send 的 futures。
  • v0.1.6 - 修复在任务第二次唤醒时在 block_onblock_on_unpin 中出现的死锁。
  • v0.1.5 - 支持 Rust 稳定版!需要 1.51+。
  • v0.1.4 - 添加 schedule_blockingExecutor::schedule_blocking
  • v0.1.3
    • 移除了全局 executor。用户必须显式创建 executor。
    • 移除了对不稳定依赖 OnceCell 的依赖。
    • 内部使用 safina_threadpool
  • v0.1.2 - 允许调用者将 futures 传递给 spawnblock_on 而不使用 Box::pin。为避免分配添加 spawn_unpinblock_on_unpin。因此,调用者无需这样做。
  • v0.1.1 - 修复徽章并更新 readme
  • v0.1.0 - 从 safina 重命名

待办事项

发布流程

  1. 编辑 Cargo.toml 并提升版本号。
  2. 运行 ./release.sh

许可:Apache-2.0

依赖