Структура Local Key
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) -> Rwhere 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
Обращается к текущему значению, локальному для задачи, и выполняет переданное замыкание.
Паника
Эта функция приведёт к панике, если для локального значения задачи не задано значение.
pub fn try_with<F, R>(&'static self, f: F) -> Result<R, AccessError>
Обращается к текущему значению, локальному для задачи, и выполняет переданное замыкание.
Если значение, локальное для задачи и связанное с этим ключом, отсутствует, этот метод вернёт AccessError. Вариант, вызывающий панику, см. в with.
Реализации трейтов
Реализации автоматических трейтов
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> BorrowMut<T> for Twhere T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> Instrument for T
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
impl<T> WithSubscriber for T
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
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