#scope #future #tokio

tokio-scoped

tokio 的作用域运行时

2 个不稳定版本

0.2.0 2022年3月8日
0.1.0 2018年9月6日

#1066异步

Download history 4072/week @ 2024-03-14 3770/week @ 2024-03-21 3671/week @ 2024-03-28 2773/week @ 2024-04-04 3366/week @ 2024-04-11 2914/week @ 2024-04-18 2551/week @ 2024-04-25 2914/week @ 2024-05-02 2679/week @ 2024-05-09 2877/week @ 2024-05-16 2571/week @ 2024-05-23 2887/week @ 2024-05-30 3097/week @ 2024-06-06 3006/week @ 2024-06-13 3014/week @ 2024-06-20 3137/week @ 2024-06-27

12,849 每月下载量
8 crates 中使用

MIT 许可证

15KB
287

tokio-scoped

tokio-scoped 提供了一个受 crossbeam 启发的 scope 函数,但用于 tokio 运行时。作用域允许用户在作用域中生成没有 'static 生命周期的 futures,通过确保在作用域退出之前,作用域中的每个 future 都已完成。

示例

#[tokio::main]
async fn main() {
    let mut v = String::from("Hello");
    tokio_scoped::scope(|scope| {
        // Use the scope to spawn the future.
        scope.spawn(async {
            v.push('!');
        });
    });
    // The scope won't exit until all spawned futures are complete.
    assert_eq!(v.as_str(), "Hello!");
}

lib.rs:

一个作用域 tokio 运行时,可以用来创建可以生成可以访问堆栈数据的 futures 的 Scope。也就是说,由 Scope 生成的 futures 不需要 'static 生命周期限制。这可以通过确保 Scope 在所有生成的 futures 完成执行之前不会退出来实现。请注意,当在异步上下文中创建作用域时(例如,在另一个生成的 futures 中),应谨慎操作。因为当 Scope 退出时,它将阻塞直到所有由 Scope 生成的 futures 都完成。因此,当在异步上下文中创建作用域时,应谨慎操作。

示例

#[tokio::main]
async fn main() {
    let mut v = String::from("Hello");
    tokio_scoped::scope(|scope| {
        // Use the scope to spawn the future.
        scope.spawn(async {
            v.push('!');
        });
    });
    // The scope won't exit until all spawned futures are complete.
    assert_eq!(v.as_str(), "Hello!");
}

另请参阅 crossbeam::scope

依赖项

~2.2–3.5MB
~51K SLoC