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,

source

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,

source§

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

Formats the value using the given formatter. Read more
source§

impl<T: 'static, F> Drop for TaskLocalFuture<T, F>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl<T: 'static, F: Future> Future for TaskLocalFuture<T, F>

§

type Output = <F as Future>::Output

The type of value produced on completion.
source§

fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output>

Attempt to resolve the future to a final value, registering the current task for wakeup if the value is not yet available. Read more
source§

impl<'__pin, T, F> Unpin for TaskLocalFuture<T, F>where __Origin<'__pin, T, F>: Unpin, T: 'static,

Auto Trait Implementations§

§

impl<T, F> RefUnwindSafe for TaskLocalFuture<T, F>where F: RefUnwindSafe, T: RefUnwindSafe,

§

impl<T, F> Send for TaskLocalFuture<T, F>where F: Send, T: Send,

§

impl<T, F> Sync for TaskLocalFuture<T, F>where F: Sync, T: Sync,

§

impl<T, F> UnwindSafe for TaskLocalFuture<T, F>where F: UnwindSafe, T: UnwindSafe,

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

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

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<F> IntoFuture for Fwhere F: Future,

§

type Output = <F as Future>::Output

The output that the future will produce on completion.
§

type IntoFuture = F

Which kind of future are we turning this into?
source§

fn into_future(self) -> <F as IntoFuture>::IntoFuture

Creates a future from a value. Read more
source§

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

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

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

Performs the conversion.
source§

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

§

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

The type returned in the event of a conversion error.
source§

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

Performs the conversion.