Skip to content

Task local variables for tokio that can be inherited across a spawn

Notifications You must be signed in to change notification settings

Xaeroxe/tokio-inherit-task-local

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tokio-inherit-task-local Build Status Latest Version

Documentation

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.

About

Task local variables for tokio that can be inherited across a spawn

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages