2 个不稳定版本
0.2.0 | 2024 年 5 月 8 日 |
---|---|
0.1.0 | 2024 年 5 月 8 日 |
#564 在 Rust 模式
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