pub struct LocalKey<T: 'static> { /* private fields */ }
rt
only.Expand description
A key for task-local data.
This type is generated by the task_local!
macro.
Unlike std::thread::LocalKey
, tokio::task::LocalKey
will
not lazily initialize the value on first access. Instead, the
value is first initialized when the future containing
the task-local is first polled by a futures executor, like Tokio.
§Examples
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;
Implementations§
Source§impl<T: 'static> LocalKey<T>
impl<T: 'static> LocalKey<T>
Sourcepub fn scope<F>(&'static self, value: T, f: F) -> TaskLocalFuture<T, F> ⓘwhere
F: Future,
pub fn scope<F>(&'static self, value: T, f: F) -> TaskLocalFuture<T, F> ⓘwhere
F: Future,
Sets a value T
as the task-local value for the future F
.
On completion of scope
, the task-local will be dropped.
§Panics
If you poll the returned future inside a call to with
or
try_with
on the same LocalKey
, then the call to poll
will panic.
§Examples
tokio::task_local! {
static NUMBER: u32;
}
NUMBER.scope(1, async move {
println!("task local value: {}", NUMBER.get());
}).await;
Sourcepub fn sync_scope<F, R>(&'static self, value: T, f: F) -> Rwhere
F: FnOnce() -> R,
pub fn sync_scope<F, R>(&'static self, value: T, f: F) -> Rwhere
F: FnOnce() -> R,
Sets a value T
as the task-local value for the closure F
.
On completion of sync_scope
, the task-local will be dropped.
§Panics
This method panics if called inside a call to with
or try_with
on the same LocalKey
.
§Examples
tokio::task_local! {
static NUMBER: u32;
}
NUMBER.sync_scope(1, || {
println!("task local value: {}", NUMBER.get());
});
Trait Implementations§
Auto Trait Implementations§
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> UnwindSafe for LocalKey<T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 8 bytes