#tasks #async-task #scoped #safe #send #future

safe-async-scoped

一个最小的、安全的范围异步任务库

2个版本

0.1.1 2020年7月27日
0.1.0 2020年7月27日

#2050 in 异步

MIT OR BSD-2-Clause OR Apache-2.0

6KB
60

safe-async-scoped 是对 FuturesUnordered 的最小封装,位于 futures 包中,它模拟 范围任务。与 async-scopedcrossbeam-scoped 等相比,safe-async-scoped

  • 完全安全的
  • 实现中没有 unsafe 代码
  • 除了 futures 没有其他依赖
  • 完全运行时无关

注意,使用 safe-async-scoped 生成的任务不会被作为单独的任务发送到执行器,因此它们只会在一个线程上运行。好处是,没有任何futures需要是 Send

示例

let listener = Async::new(TcpListener::bind("127.0.0.1:8080").unwrap()).unwrap();
let lala = String::from("hello");
{
   let scope = Scope::new();
   scope
       .start(async {
           loop {
               let (client, _) = listener.accept().await.unwrap();
               scope.spawn(async {
                   handle(client, &lala).await;
               });
           }
       })
       .await;
}

依赖

~1MB
~16K SLoC