跳到主要内容

LocalKey

搜索

结构体 LocalKey 

源代码
pub struct LocalKey<T: 'static> { /* 私有字段 */ }
展开描述

用于任务本地数据的键。

此类型由 task_local! 宏生成。

std::thread::LocalKey, tokio::task::LocalKey 不会在首次访问时惰性初始化该值。而是在包含任务本地的 future 首次由 futures 执行器(如 Tokio)poll 时才初始化该值。

§示例

tokio::task_local! {
    static NUMBER: u32;
}

NUMBER.scope(1, async move {
    assert_eq!(NUMBER.get(), 1);
}).await;

NUMBER.scope(2, async move {
    assert_eq!(NUMBER.get(), 2);

    NUMBER.scope(3, async move {
        assert_eq!(NUMBER.get(), 3);
    }).await;
}).await;

实现§

源代码§

impl<T: 'static> LocalKey<T>

源代码

pub fn scope<F>(&'static self, value: T, f: F) -> TaskLocalFuture<T, F>
where F: Future,

将值 T 设置为 future F 的任务本地值。

scope 完成时,任务本地将被 drop。

§恐慌

如果在同一个 LocalKey 上调用 withtry_with 时 poll 返回的 future,则对 poll 的调用将发生 panic。

§示例
tokio::task_local! {
    static NUMBER: u32;
}

NUMBER.scope(1, async move {
    println!("task local value: {}", NUMBER.get());
}).await;
源代码

pub fn sync_scope<F, R>(&'static self, value: T, f: F) -> R
where F: FnOnce() -> R,

将值 T 设置为闭包 F 的任务本地值。

sync_scope 完成时,任务本地将被 drop。

§恐慌

如果在同一个 LocalKey 上调用 withtry_with 时调用此方法,则会发生 panic。

§示例
tokio::task_local! {
    static NUMBER: u32;
}

NUMBER.sync_scope(1, || {
    println!("task local value: {}", NUMBER.get());
});
源代码

pub fn with<F, R>(&'static self, f: F) -> R
where F: FnOnce(&T) -> R,

访问当前 task-local 并运行所提供的闭包。

§恐慌

如果 task local 没有设置值,此函数会发生 panic。

源代码

pub fn try_with<F, R>(&'static self, f: F) -> Result<R, AccessError>
where F: FnOnce(&T) -> R,

访问当前 task-local 并运行所提供的闭包。

如果具有关联键的任务本地不存在,则此方法将返回 AccessError。有关 panicking 变体,请参见 with

源代码§

impl<T: Clone + 'static> LocalKey<T>

源代码

pub fn get(&'static self) -> T

如果 task-local 值实现了 Clone,则返回该值的一份副本。

§恐慌

如果 task local 没有设置值,此函数会发生 panic。

源代码

pub fn try_get(&'static self) -> Result<T, AccessError>

如果 task-local 值实现了 Clone,则返回该值的一份副本。

如果具有关联键的任务本地不存在,则此方法将返回 AccessError。有关 panicking 变体,请参见 get

trait 实现§

源代码§

impl<T: 'static> Debug for LocalKey<T>

源代码§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

使用给定的格式化器格式化此值。 更多信息

自动 trait 实现§

§

impl<T> Freeze for LocalKey<T>

§

impl<T> RefUnwindSafe for LocalKey<T>

§

impl<T> Send for LocalKey<T>

§

impl<T> Sync for LocalKey<T>

§

impl<T> Unpin for LocalKey<T>

§

impl<T> UnsafeUnpin for LocalKey<T>

§

impl<T> UnwindSafe for LocalKey<T>

blanket 实现§

源代码§

impl<T> Any for T
where T: 'static + ?Sized,

源代码§

fn type_id(&self) -> TypeId

Gets the TypeId of self. 更多信息
源代码§

impl<T> Borrow<T> for T
where T: ?Sized,

源代码§

fn borrow(&self) -> &T

Immutably borrows from an owned value. 更多信息
源代码§

impl<T> BorrowMut<T> for T
where T: ?Sized,

源代码§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. 更多信息
源代码§

impl<T> From<T> for T

源代码§

fn from(t: T) -> T

原样返回参数。

源代码§

impl<T, U> Into<U> for T
where U: From<T>,

源代码§

fn into(self) -> U

调用 U::from(self)

也就是说,此转换是 From<T> for U 实现选择执行的操作。

源代码§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

源代码§

type Error = Infallible

转换出错时返回的类型。
源代码§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

执行转换。
源代码§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

源代码§

type Error = <U as TryFrom<T>>::Error

转换出错时返回的类型。
源代码§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

执行转换。