mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-08-24 00:00:11 +02:00
task: stabilise JoinMap (#7075)
This commit is contained in:
@@ -29,10 +29,6 @@ use tokio::task::{AbortHandle, Id, JoinError, JoinSet, LocalSet};
|
||||
///
|
||||
/// When the `JoinMap` is dropped, all tasks in the `JoinMap` are immediately aborted.
|
||||
///
|
||||
/// **Note**: This type depends on Tokio's [unstable API][unstable]. See [the
|
||||
/// documentation on unstable features][unstable] for details on how to enable
|
||||
/// Tokio's unstable features.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Spawn multiple tasks and wait for them:
|
||||
@@ -96,11 +92,9 @@ use tokio::task::{AbortHandle, Id, JoinError, JoinSet, LocalSet};
|
||||
/// ```
|
||||
///
|
||||
/// [`JoinSet`]: tokio::task::JoinSet
|
||||
/// [unstable]: tokio#unstable-features
|
||||
/// [abort]: fn@Self::abort
|
||||
/// [abort_matching]: fn@Self::abort_matching
|
||||
/// [contains]: fn@Self::contains_key
|
||||
#[cfg_attr(docsrs, doc(cfg(all(feature = "rt", tokio_unstable))))]
|
||||
pub struct JoinMap<K, V, S = RandomState> {
|
||||
/// A map of the [`AbortHandle`]s of the tasks spawned on this `JoinMap`,
|
||||
/// indexed by their keys.
|
||||
@@ -541,9 +535,9 @@ where
|
||||
/// assert!(!map.abort("goodbye universe"));
|
||||
/// # }
|
||||
/// ```
|
||||
pub fn abort<Q: ?Sized>(&mut self, key: &Q) -> bool
|
||||
pub fn abort<Q>(&mut self, key: &Q) -> bool
|
||||
where
|
||||
Q: Hash + Eq,
|
||||
Q: ?Sized + Hash + Eq,
|
||||
K: Borrow<Q>,
|
||||
{
|
||||
match self.get_by_key(key) {
|
||||
@@ -638,9 +632,9 @@ where
|
||||
/// call to [`join_next`], this method will still return `true`.
|
||||
///
|
||||
/// [`join_next`]: fn@Self::join_next
|
||||
pub fn contains_key<Q: ?Sized>(&self, key: &Q) -> bool
|
||||
pub fn contains_key<Q>(&self, key: &Q) -> bool
|
||||
where
|
||||
Q: Hash + Eq,
|
||||
Q: ?Sized + Hash + Eq,
|
||||
K: Borrow<Q>,
|
||||
{
|
||||
self.get_by_key(key).is_some()
|
||||
@@ -744,9 +738,9 @@ where
|
||||
}
|
||||
|
||||
/// Look up a task in the map by its key, returning the key and abort handle.
|
||||
fn get_by_key<'map, Q: ?Sized>(&'map self, key: &Q) -> Option<&'map (K, AbortHandle)>
|
||||
fn get_by_key<'map, Q>(&'map self, key: &Q) -> Option<&'map (K, AbortHandle)>
|
||||
where
|
||||
Q: Hash + Eq,
|
||||
Q: ?Sized + Hash + Eq,
|
||||
K: Borrow<Q>,
|
||||
{
|
||||
let hash_builder = self.hashes_by_task.hasher();
|
||||
@@ -774,9 +768,10 @@ where
|
||||
|
||||
/// Returns the hash for a given key.
|
||||
#[inline]
|
||||
fn hash_one<S: BuildHasher, Q: ?Sized>(hash_builder: &S, key: &Q) -> u64
|
||||
fn hash_one<S, Q>(hash_builder: &S, key: &Q) -> u64
|
||||
where
|
||||
Q: Hash,
|
||||
Q: ?Sized + Hash,
|
||||
S: BuildHasher,
|
||||
{
|
||||
let mut hasher = hash_builder.build_hasher();
|
||||
key.hash(&mut hasher);
|
||||
|
||||
+17
-12
@@ -1,16 +1,21 @@
|
||||
//! Extra utilities for spawning tasks
|
||||
//!
|
||||
//! This module is only available when the `rt` feature is enabled. Note that enabling the
|
||||
//! `join-map` feature will automatically also enable the `rt` feature.
|
||||
|
||||
#[cfg(tokio_unstable)]
|
||||
cfg_rt! {
|
||||
mod spawn_pinned;
|
||||
pub use spawn_pinned::LocalPoolHandle;
|
||||
|
||||
pub mod task_tracker;
|
||||
pub use task_tracker::TaskTracker;
|
||||
|
||||
mod abort_on_drop;
|
||||
pub use abort_on_drop::AbortOnDropHandle;
|
||||
}
|
||||
|
||||
#[cfg(feature = "join-map")]
|
||||
mod join_map;
|
||||
mod spawn_pinned;
|
||||
pub use spawn_pinned::LocalPoolHandle;
|
||||
|
||||
#[cfg(tokio_unstable)]
|
||||
#[cfg_attr(docsrs, doc(cfg(all(tokio_unstable, feature = "rt"))))]
|
||||
#[cfg(feature = "join-map")]
|
||||
#[cfg_attr(docsrs, doc(cfg(feature = "join-map")))]
|
||||
pub use join_map::{JoinMap, JoinMapKeys};
|
||||
|
||||
pub mod task_tracker;
|
||||
pub use task_tracker::TaskTracker;
|
||||
|
||||
mod abort_on_drop;
|
||||
pub use abort_on_drop::AbortOnDropHandle;
|
||||
|
||||
Reference in New Issue
Block a user