task-local

Crates.iotask-local
lib.rstask-local
version
sourcesrc
created_at2025-03-25 05:15:45.447709+00
updated_at2025-03-25 05:15:45.447709+00
descriptionTask-local storage for asynchronous tasks
homepage
repositoryhttps://github.com/BugenZhao/task-local
max_upload_size
id1604783
Cargo.toml error:TOML parse error at line 17, column 1 | 17 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include`
size0
Bugen Zhao (BugenZhao)

documentation

https://docs.rs/task-local

README

task-local

Crates.io Documentation CI Status License: MIT OR Apache-2.0

Task-local storage for asynchronous tasks, extracted from the tokio::task_local module.

This crate provides a way to store task-local values across .await points without requiring the Tokio runtime.

Overview

Task-local storage allows you to store and access data that is local to the current asynchronous task. Unlike thread-local storage, task-local values are preserved across .await points within the same task.

Usage

Add this to your Cargo.toml:

[dependencies]
task-local = "0.1.0"

Example

use task_local::task_local;

task_local! {
    static NUMBER: u32;
}

async fn example() {
    NUMBER.scope(1, async {
        // The value 1 is accessible within this async block
        assert_eq!(NUMBER.get(), 1);

        // It's also accessible across .await points
        some_async_function().await;
        assert_eq!(NUMBER.get(), 1);

        // You can nest scopes
        NUMBER.scope(2, async {
            assert_eq!(NUMBER.get(), 2);
        }).await;

        // After the nested scope, the original value is restored
        assert_eq!(NUMBER.get(), 1);
    }).await;
}

async fn some_async_function() {
    // The task-local value is still accessible here
    assert_eq!(NUMBER.get(), 1);
}

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Commit count: 0

cargo fmt