#local #task #tokio #spawn #inherit #variables #across

tokio-inherit-task-local

tokio 的任务局部变量,可以在 spawn 之间继承

2 个不稳定版本

0.2.0 2024 年 5 月 8 日
0.1.0 2024 年 5 月 8 日

#564Rust 模式

MIT/Apache

16KB
153

tokio-inherit-task-local

提供了与 tokio::task_local 非常相似的功能,但有一个关键区别。任何使用 .inherit_task_local() 注释的未来都将继承其父任务的任务局部值。这不会继承由 tokio::task_local 创建的值,它只会继承由 inheritable_task_local 创建的值。

这里有一个简单的例子

use tokio_inherit_task_local::{inheritable_task_local, FutureInheritTaskLocal as _};

inheritable_task_local! {
    pub static DEMO_VALUE: u32;
}

async fn foo() {
    let out = DEMO_VALUE
        .scope(5, async {
            tokio::spawn(async { DEMO_VALUE.with(|&v| v) }.inherit_task_local()).await
        })
        .await
        .unwrap();
    assert_eq!(out, 5);
}

尽管 DEMO_VALUE 没有为spawn的未来定义,但它仍然能够继承其父中定义的值。这要归功于 .inherit_task_local() 方法的调用。该方法可以在 FutureInheritTaskLocal 中找到。

这些继承的值 必须是 Clone。子任务将继承对原始值的计数引用。

依赖

~2.1–3.5MB
~52K SLoC