future: add adapters of CancellationToken for FutureExt (#7475)

This commit is contained in:
yanyuxing
2025-07-29 18:09:13 +08:00
committed by GitHub
parent 1b27e17ff8
commit 0e5c5d64f5
8 changed files with 568 additions and 60 deletions
+4 -30
View File
@@ -8,45 +8,19 @@
//!
//! This type must be used from within the context of the `Runtime`.
use std::future::Future;
use std::time::Duration;
use tokio::time::Timeout;
mod wheel;
pub mod delay_queue;
// re-export `FutureExt` to avoid breaking change
#[doc(inline)]
pub use crate::future::FutureExt;
#[doc(inline)]
pub use delay_queue::DelayQueue;
/// A trait which contains a variety of convenient adapters and utilities for `Future`s.
pub trait FutureExt: Future {
/// A wrapper around [`tokio::time::timeout`], with the advantage that it is easier to write
/// fluent call chains.
///
/// # Examples
///
/// ```rust
/// use tokio::{sync::oneshot, time::Duration};
/// use tokio_util::time::FutureExt;
///
/// # async fn dox() {
/// let (tx, rx) = oneshot::channel::<()>();
///
/// let res = rx.timeout(Duration::from_millis(10)).await;
/// assert!(res.is_err());
/// # }
/// ```
fn timeout(self, timeout: Duration) -> Timeout<Self>
where
Self: Sized,
{
tokio::time::timeout(timeout, self)
}
}
impl<T: Future + ?Sized> FutureExt for T {}
// ===== Internal utils =====
enum Round {