Crates.io | tokio-inherit-task-local |
lib.rs | tokio-inherit-task-local |
version | 0.2.0 |
source | src |
created_at | 2024-05-08 17:48:07.384492 |
updated_at | 2024-05-08 19:04:23.981056 |
description | Task local variables for tokio that can be inherited across a spawn |
homepage | |
repository | https://github.com/Xaeroxe/tokio-inherit-task-local |
max_upload_size | |
id | 1234004 |
size | 20,503 |
Provides functionality very similar to tokio::task_local
with one key difference. Any future annotated with
.inherit_task_local()
will inherit the task local values of the task which spawned it. This does not inherit
values created by tokio::task_local
, it will only inherit values created by inheritable_task_local
.
Here's a simple example
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);
}
Even though DEMO_VALUE
was not defined for the spawned future, it was still able to inherit the value defined in
its parent. This happens thanks to the .inherit_task_local()
method call. That method can be found in
FutureInheritTaskLocal
.
These inherited values DO NOT need to be Clone
. Child tasks will inherit counted references to the original value.