Expand description
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::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.
Macros§
- inheritable_
task_ local - Declares a new inheritable task-local key of type
InheritableLocalKey.
Structs§
- Inheritable
Local Key - A key for inheritable task-local data.
- Task
Local Inheritable Table - This is mostly an implementation detail. It stores references to all of the inheritable task local values that are available to a given task. You are not meant to use this directly.
Enums§
- Inheritable
Access Error - Returned when the requested inheritable task local did not have a value set.
Traits§
- Future
Inherit Task Local - Extends any
Futurewith a'staticlifetime. Provides a method that copies references to the current inheritable task local values into thisFuture.
Functions§
- inherit_
task_ local - Returns a closure which has its own copy of the current table for inheritable task locals.
Intended for use with
tokio::task::spawn_blocking.