mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-08-18 00:00:09 +02:00
rt: move task::Id into its own file (#5327)
This is a minor internal cleanup.
This commit is contained in:
@@ -348,10 +348,14 @@ jobs:
|
||||
# release.
|
||||
- name: "check -p tokio --all-features"
|
||||
run: cargo check -p tokio --all-features
|
||||
env:
|
||||
RUSTFLAGS: "" # remove -Dwarnings
|
||||
- name: "pin once_cell version"
|
||||
run: cargo update -p once_cell --precise 1.14.0
|
||||
- name: "check --workspace --all-features"
|
||||
run: cargo check --workspace --all-features
|
||||
env:
|
||||
RUSTFLAGS: "" # remove -Dwarnings
|
||||
|
||||
minimal-versions:
|
||||
name: minimal-versions
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
use crate::runtime::context;
|
||||
|
||||
use std::fmt;
|
||||
|
||||
/// An opaque ID that uniquely identifies a task relative to all other currently
|
||||
/// running tasks.
|
||||
///
|
||||
/// # Notes
|
||||
///
|
||||
/// - Task IDs are unique relative to other *currently running* tasks. When a
|
||||
/// task completes, the same ID may be used for another task.
|
||||
/// - Task IDs are *not* sequential, and do not indicate the order in which
|
||||
/// tasks are spawned, what runtime a task is spawned on, or any other data.
|
||||
/// - The task ID of the currently running task can be obtained from inside the
|
||||
/// task via the [`task::try_id()`](crate::task::try_id()) and
|
||||
/// [`task::id()`](crate::task::id()) functions and from outside the task via
|
||||
/// the [`JoinHandle::id()`](crate::task::JoinHandle::id()) function.
|
||||
///
|
||||
/// **Note**: This is an [unstable API][unstable]. The public API of this type
|
||||
/// may break in 1.x releases. See [the documentation on unstable
|
||||
/// features][unstable] for details.
|
||||
///
|
||||
/// [unstable]: crate#unstable-features
|
||||
#[cfg_attr(docsrs, doc(cfg(all(feature = "rt", tokio_unstable))))]
|
||||
#[cfg_attr(not(tokio_unstable), allow(unreachable_pub))]
|
||||
#[derive(Clone, Copy, Debug, Hash, Eq, PartialEq)]
|
||||
pub struct Id(u64);
|
||||
|
||||
/// Returns the [`Id`] of the currently running task.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if called from outside a task. Please note that calls
|
||||
/// to `block_on` do not have task IDs, so the method will panic if called from
|
||||
/// within a call to `block_on`. For a version of this function that doesn't
|
||||
/// panic, see [`task::try_id()`](crate::runtime::task::try_id()).
|
||||
///
|
||||
/// **Note**: This is an [unstable API][unstable]. The public API of this type
|
||||
/// may break in 1.x releases. See [the documentation on unstable
|
||||
/// features][unstable] for details.
|
||||
///
|
||||
/// [task ID]: crate::task::Id
|
||||
/// [unstable]: crate#unstable-features
|
||||
#[cfg_attr(not(tokio_unstable), allow(unreachable_pub))]
|
||||
#[track_caller]
|
||||
pub fn id() -> Id {
|
||||
context::current_task_id().expect("Can't get a task id when not inside a task")
|
||||
}
|
||||
|
||||
/// Returns the [`Id`] of the currently running task, or `None` if called outside
|
||||
/// of a task.
|
||||
///
|
||||
/// This function is similar to [`task::id()`](crate::runtime::task::id()), except
|
||||
/// that it returns `None` rather than panicking if called outside of a task
|
||||
/// context.
|
||||
///
|
||||
/// **Note**: This is an [unstable API][unstable]. The public API of this type
|
||||
/// may break in 1.x releases. See [the documentation on unstable
|
||||
/// features][unstable] for details.
|
||||
///
|
||||
/// [task ID]: crate::task::Id
|
||||
/// [unstable]: crate#unstable-features
|
||||
#[cfg_attr(not(tokio_unstable), allow(unreachable_pub))]
|
||||
#[track_caller]
|
||||
pub fn try_id() -> Option<Id> {
|
||||
context::current_task_id()
|
||||
}
|
||||
|
||||
impl fmt::Display for Id {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
self.0.fmt(f)
|
||||
}
|
||||
}
|
||||
|
||||
impl Id {
|
||||
pub(crate) fn next() -> Self {
|
||||
use crate::loom::sync::atomic::{Ordering::Relaxed, StaticAtomicU64};
|
||||
|
||||
static NEXT_ID: StaticAtomicU64 = StaticAtomicU64::new(1);
|
||||
|
||||
Self(NEXT_ID.fetch_add(1, Relaxed))
|
||||
}
|
||||
|
||||
pub(crate) fn as_u64(&self) -> u64 {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
@@ -168,19 +168,20 @@
|
||||
// unstable. This should be removed once `JoinSet` is stabilized.
|
||||
#![cfg_attr(not(tokio_unstable), allow(dead_code))]
|
||||
|
||||
use crate::runtime::context;
|
||||
|
||||
mod core;
|
||||
use self::core::Cell;
|
||||
use self::core::Header;
|
||||
|
||||
mod error;
|
||||
#[allow(unreachable_pub)] // https://github.com/rust-lang/rust/issues/57411
|
||||
pub use self::error::JoinError;
|
||||
|
||||
mod harness;
|
||||
use self::harness::Harness;
|
||||
|
||||
mod id;
|
||||
#[cfg_attr(not(tokio_unstable), allow(unreachable_pub))]
|
||||
pub use id::{id, try_id, Id};
|
||||
|
||||
cfg_rt_multi_thread! {
|
||||
mod inject;
|
||||
pub(super) use self::inject::Inject;
|
||||
@@ -191,10 +192,8 @@ mod abort;
|
||||
mod join;
|
||||
|
||||
#[cfg(feature = "rt")]
|
||||
#[allow(unreachable_pub)] // https://github.com/rust-lang/rust/issues/57411
|
||||
pub use self::abort::AbortHandle;
|
||||
|
||||
#[allow(unreachable_pub)] // https://github.com/rust-lang/rust/issues/57411
|
||||
pub use self::join::JoinHandle;
|
||||
|
||||
mod list;
|
||||
@@ -215,70 +214,6 @@ use std::marker::PhantomData;
|
||||
use std::ptr::NonNull;
|
||||
use std::{fmt, mem};
|
||||
|
||||
/// An opaque ID that uniquely identifies a task relative to all other currently
|
||||
/// running tasks.
|
||||
///
|
||||
/// # Notes
|
||||
///
|
||||
/// - Task IDs are unique relative to other *currently running* tasks. When a
|
||||
/// task completes, the same ID may be used for another task.
|
||||
/// - Task IDs are *not* sequential, and do not indicate the order in which
|
||||
/// tasks are spawned, what runtime a task is spawned on, or any other data.
|
||||
/// - The task ID of the currently running task can be obtained from inside the
|
||||
/// task via the [`task::try_id()`](crate::task::try_id()) and
|
||||
/// [`task::id()`](crate::task::id()) functions and from outside the task via
|
||||
/// the [`JoinHandle::id()`](crate::task::JoinHandle::id()) function.
|
||||
///
|
||||
/// **Note**: This is an [unstable API][unstable]. The public API of this type
|
||||
/// may break in 1.x releases. See [the documentation on unstable
|
||||
/// features][unstable] for details.
|
||||
///
|
||||
/// [unstable]: crate#unstable-features
|
||||
#[cfg_attr(docsrs, doc(cfg(all(feature = "rt", tokio_unstable))))]
|
||||
#[cfg_attr(not(tokio_unstable), allow(unreachable_pub))]
|
||||
#[derive(Clone, Copy, Debug, Hash, Eq, PartialEq)]
|
||||
pub struct Id(u64);
|
||||
|
||||
/// Returns the [`Id`] of the currently running task.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if called from outside a task. Please note that calls
|
||||
/// to `block_on` do not have task IDs, so the method will panic if called from
|
||||
/// within a call to `block_on`. For a version of this function that doesn't
|
||||
/// panic, see [`task::try_id()`](crate::runtime::task::try_id()).
|
||||
///
|
||||
/// **Note**: This is an [unstable API][unstable]. The public API of this type
|
||||
/// may break in 1.x releases. See [the documentation on unstable
|
||||
/// features][unstable] for details.
|
||||
///
|
||||
/// [task ID]: crate::task::Id
|
||||
/// [unstable]: crate#unstable-features
|
||||
#[cfg_attr(not(tokio_unstable), allow(unreachable_pub))]
|
||||
#[track_caller]
|
||||
pub fn id() -> Id {
|
||||
context::current_task_id().expect("Can't get a task id when not inside a task")
|
||||
}
|
||||
|
||||
/// Returns the [`Id`] of the currently running task, or `None` if called outside
|
||||
/// of a task.
|
||||
///
|
||||
/// This function is similar to [`task::id()`](crate::runtime::task::id()), except
|
||||
/// that it returns `None` rather than panicking if called outside of a task
|
||||
/// context.
|
||||
///
|
||||
/// **Note**: This is an [unstable API][unstable]. The public API of this type
|
||||
/// may break in 1.x releases. See [the documentation on unstable
|
||||
/// features][unstable] for details.
|
||||
///
|
||||
/// [task ID]: crate::task::Id
|
||||
/// [unstable]: crate#unstable-features
|
||||
#[cfg_attr(not(tokio_unstable), allow(unreachable_pub))]
|
||||
#[track_caller]
|
||||
pub fn try_id() -> Option<Id> {
|
||||
context::current_task_id()
|
||||
}
|
||||
|
||||
/// An owned handle to the task, tracked by ref count.
|
||||
#[repr(transparent)]
|
||||
pub(crate) struct Task<S: 'static> {
|
||||
@@ -554,23 +489,3 @@ unsafe impl<S> linked_list::Link for Task<S> {
|
||||
self::core::Trailer::addr_of_owned(Header::get_trailer(target))
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for Id {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
self.0.fmt(f)
|
||||
}
|
||||
}
|
||||
|
||||
impl Id {
|
||||
pub(crate) fn next() -> Self {
|
||||
use crate::loom::sync::atomic::{Ordering::Relaxed, StaticAtomicU64};
|
||||
|
||||
static NEXT_ID: StaticAtomicU64 = StaticAtomicU64::new(1);
|
||||
|
||||
Self(NEXT_ID.fetch_add(1, Relaxed))
|
||||
}
|
||||
|
||||
pub(crate) fn as_u64(&self) -> u64 {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user