Skip to content

Latest commit

 

History

History
39 lines (29 loc) · 1.69 KB

README.md

File metadata and controls

39 lines (29 loc) · 1.69 KB

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.