Struct tokio::task::task_local::TaskLocalFuture
source · pub struct TaskLocalFuture<T, F>where
T: 'static,{
local: &'static LocalKey<T>,
slot: Option<T>,
future: Option<F>,
_pinned: PhantomPinned,
}
Expand description
A future that sets a value T
of a task local for the future F
during
its execution.
The value of the task-local must be 'static
and will be dropped on the
completion of the future.
Created by the function LocalKey::scope
.
§Examples
tokio::task_local! {
static NUMBER: u32;
}
NUMBER.scope(1, async move {
println!("task local value: {}", NUMBER.get());
}).await;
Fields§
§local: &'static LocalKey<T>
§slot: Option<T>
§future: Option<F>
§_pinned: PhantomPinned
Implementations§
source§impl<T, F> TaskLocalFuture<T, F>where
T: 'static,
impl<T, F> TaskLocalFuture<T, F>where
T: 'static,
sourcepub fn take_value(self: Pin<&mut Self>) -> Option<T>
pub fn take_value(self: Pin<&mut Self>) -> Option<T>
Returns the value stored in the task local by this TaskLocalFuture
.
The function returns:
Some(T)
if the task local value exists.None
if the task local value has already been taken.
Note that this function attempts to take the task local value even if
the future has not yet completed. In that case, the value will no longer
be available via the task local after the call to take_value
.
§Examples
tokio::task_local! {
static KEY: u32;
}
let fut = KEY.scope(42, async {
// Do some async work
});
let mut pinned = Box::pin(fut);
// Complete the TaskLocalFuture
let _ = pinned.as_mut().await;
// And here, we can take task local value
let value = pinned.as_mut().take_value();
assert_eq!(value, Some(42));
Trait Implementations§
source§impl<T, F> Debug for TaskLocalFuture<T, F>where
T: Debug + 'static,
impl<T, F> Debug for TaskLocalFuture<T, F>where
T: Debug + 'static,
source§impl<T: 'static, F> Drop for TaskLocalFuture<T, F>
impl<T: 'static, F> Drop for TaskLocalFuture<T, F>
source§impl<T: 'static, F: Future> Future for TaskLocalFuture<T, F>
impl<T: 'static, F: Future> Future for TaskLocalFuture<T, F>
impl<'__pin, T, F> Unpin for TaskLocalFuture<T, F>where
PinnedFieldsOf<__Origin<'__pin, T, F>>: Unpin,
T: 'static,
Auto Trait Implementations§
impl<T, F> Freeze for TaskLocalFuture<T, F>
impl<T, F> RefUnwindSafe for TaskLocalFuture<T, F>where
T: RefUnwindSafe,
F: RefUnwindSafe,
impl<T, F> Send for TaskLocalFuture<T, F>
impl<T, F> Sync for TaskLocalFuture<T, F>
impl<T, F> UnwindSafe for TaskLocalFuture<T, F>where
T: UnwindSafe,
F: UnwindSafe,
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
Mutably borrows from an owned value. Read more
source§impl<F> IntoFuture for Fwhere
F: Future,
impl<F> IntoFuture for Fwhere
F: Future,
§type IntoFuture = F
type IntoFuture = F
Which kind of future are we turning this into?
source§fn into_future(self) -> <F as IntoFuture>::IntoFuture
fn into_future(self) -> <F as IntoFuture>::IntoFuture
Creates a future from a value. Read more