Spec-Zone.ru › Tokio

Структура LocalKey

pub struct LocalKey<T: 'static> { /* private fields */ }
Доступно только при включённой функции крейта rt.

Ключ для данных, локальных для задачи.

Этот тип генерируется макросом task_local!.

В отличие от std::thread::LocalKey, tokio::task::LocalKey не инициализирует значение лениво при первом обращении. Вместо этого значение впервые инициализируется, когда future, содержащий локальные для задачи данные, впервые опрашивается исполнителем futures, например Tokio.

Примеры

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 значение, локальное для задачи, будет уничтожено.

Паника

Если опросить возвращённый future внутри вызова with или try_with для того же LocalKey, вызов poll приведёт к панике.

Примеры
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 значение, локальное для задачи, будет уничтожено.

Паника

Этот метод приводит к панике, если вызвать его внутри вызова with или try_with для того же LocalKey.

Примеры
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,

Обращается к текущему значению, локальному для задачи, и выполняет переданное замыкание.

Паника

Эта функция приведёт к панике, если для локального значения задачи не задано значение.

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

Обращается к текущему значению, локальному для задачи, и выполняет переданное замыкание.

Если значение, локальное для задачи и связанное с этим ключом, отсутствует, этот метод вернёт AccessError. Вариант, вызывающий панику, см. в with.

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

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

Возвращает копию значения, локального для задачи, если это значение реализует Clone.

Паника

Эта функция приведёт к панике, если для локального значения задачи не задано значение.

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

Возвращает копию значения, локального для задачи, если это значение реализует Clone.

Если значение, локальное для задачи и связанное с этим ключом, отсутствует, этот метод вернёт AccessError. Вариант, вызывающий панику, см. в get.

Реализации трейтов

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

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

Форматирует значение с помощью заданного форматировщика. Подробнее

Реализации автоматических трейтов

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>

Общие реализации

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

fn type_id(&self) -> TypeId

Получает TypeId для self. Подробнее

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

fn borrow(&self) -> &T

Неизменяемо заимствует значение, принадлежащее вызывающему коду. Подробнее

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

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

Изменяемо заимствует значение, принадлежащее вызывающему коду. Подробнее

impl<T> From<T> for T

fn from(t: T) -> T

Возвращает аргумент без изменений.

impl<T> Instrument for T

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Инструментирует этот тип с помощью предоставленного Span, возвращая обёртку Instrumented. Подробнее

fn in_current_span(self) -> Instrumented<Self> ⓘ

Инструментирует этот тип с помощью текущего Span, возвращая обёртку Instrumented. Подробнее

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>

Выполняет преобразование.

impl<T> WithSubscriber for T

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Присоединяет указанный Subscriber к этому типу и возвращает обёртку WithDispatch. Подробнее

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Присоединяет текущий по умолчанию Subscriber к этому типу и возвращает обёртку WithDispatch. Подробнее

MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/task/struct.LocalKey.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API