Trait FutureExt

Source
pub trait FutureExt: Future {
    // Provided methods
    fn with_cancellation_token(
        self,
        cancellation_token: &CancellationToken,
    ) -> WithCancellationTokenFuture<'_, Self>
       where Self: Sized { ... }
    fn with_cancellation_token_owned(
        self,
        cancellation_token: CancellationToken,
    ) -> WithCancellationTokenFutureOwned<Self>
       where Self: Sized { ... }
}
Expand description

A trait which contains a variety of convenient adapters and utilities for Futures.

Provided Methods§

Source

fn with_cancellation_token( self, cancellation_token: &CancellationToken, ) -> WithCancellationTokenFuture<'_, Self>
where Self: Sized,

Similar to CancellationToken::run_until_cancelled, but with the advantage that it is easier to write fluent call chains, and biased towards waiting for CancellationToken to complete.

§Fairness

Calling this on an already-cancelled token directly returns None. For all subsequent polls, in case of concurrent completion and cancellation, this is biased towards the future completion.

§Examples
use tokio::sync::oneshot;
use tokio_util::future::FutureExt;
use tokio_util::sync::CancellationToken;

let (_tx, rx) = oneshot::channel::<()>();
let token = CancellationToken::new();
let token_clone = token.clone();
tokio::spawn(async move {
    tokio::time::sleep(std::time::Duration::from_millis(10)).await;
    token.cancel();
});
assert!(rx.with_cancellation_token(&token_clone).await.is_none())
Source

fn with_cancellation_token_owned( self, cancellation_token: CancellationToken, ) -> WithCancellationTokenFutureOwned<Self>
where Self: Sized,

Similar to CancellationToken::run_until_cancelled_owned, but with the advantage that it is easier to write fluent call chains, and biased towards waiting for CancellationToken to complete.

§Fairness

Calling this on an already-cancelled token directly returns None. For all subsequent polls, in case of concurrent completion and cancellation, this is biased towards the future completion.

§Examples
use tokio::sync::oneshot;
use tokio_util::future::FutureExt;
use tokio_util::sync::CancellationToken;

let (_tx, rx) = oneshot::channel::<()>();
let token = CancellationToken::new();
let token_clone = token.clone();
tokio::spawn(async move {
    tokio::time::sleep(std::time::Duration::from_millis(10)).await;
    token.cancel();
});
assert!(rx.with_cancellation_token_owned(token_clone).await.is_none())

Implementors§

Source§

impl<T: Future + ?Sized> FutureExt for T