mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-09-08 00:00:13 +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.
|
# release.
|
||||||
- name: "check -p tokio --all-features"
|
- name: "check -p tokio --all-features"
|
||||||
run: cargo check -p tokio --all-features
|
run: cargo check -p tokio --all-features
|
||||||
|
env:
|
||||||
|
RUSTFLAGS: "" # remove -Dwarnings
|
||||||
- name: "pin once_cell version"
|
- name: "pin once_cell version"
|
||||||
run: cargo update -p once_cell --precise 1.14.0
|
run: cargo update -p once_cell --precise 1.14.0
|
||||||
- name: "check --workspace --all-features"
|
- name: "check --workspace --all-features"
|
||||||
run: cargo check --workspace --all-features
|
run: cargo check --workspace --all-features
|
||||||
|
env:
|
||||||
|
RUSTFLAGS: "" # remove -Dwarnings
|
||||||
|
|
||||||
minimal-versions:
|
minimal-versions:
|
||||||
name: 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.
|
// unstable. This should be removed once `JoinSet` is stabilized.
|
||||||
#![cfg_attr(not(tokio_unstable), allow(dead_code))]
|
#![cfg_attr(not(tokio_unstable), allow(dead_code))]
|
||||||
|
|
||||||
use crate::runtime::context;
|
|
||||||
|
|
||||||
mod core;
|
mod core;
|
||||||
use self::core::Cell;
|
use self::core::Cell;
|
||||||
use self::core::Header;
|
use self::core::Header;
|
||||||
|
|
||||||
mod error;
|
mod error;
|
||||||
#[allow(unreachable_pub)] // https://github.com/rust-lang/rust/issues/57411
|
|
||||||
pub use self::error::JoinError;
|
pub use self::error::JoinError;
|
||||||
|
|
||||||
mod harness;
|
mod harness;
|
||||||
use self::harness::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! {
|
cfg_rt_multi_thread! {
|
||||||
mod inject;
|
mod inject;
|
||||||
pub(super) use self::inject::Inject;
|
pub(super) use self::inject::Inject;
|
||||||
@@ -191,10 +192,8 @@ mod abort;
|
|||||||
mod join;
|
mod join;
|
||||||
|
|
||||||
#[cfg(feature = "rt")]
|
#[cfg(feature = "rt")]
|
||||||
#[allow(unreachable_pub)] // https://github.com/rust-lang/rust/issues/57411
|
|
||||||
pub use self::abort::AbortHandle;
|
pub use self::abort::AbortHandle;
|
||||||
|
|
||||||
#[allow(unreachable_pub)] // https://github.com/rust-lang/rust/issues/57411
|
|
||||||
pub use self::join::JoinHandle;
|
pub use self::join::JoinHandle;
|
||||||
|
|
||||||
mod list;
|
mod list;
|
||||||
@@ -215,70 +214,6 @@ use std::marker::PhantomData;
|
|||||||
use std::ptr::NonNull;
|
use std::ptr::NonNull;
|
||||||
use std::{fmt, mem};
|
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.
|
/// An owned handle to the task, tracked by ref count.
|
||||||
#[repr(transparent)]
|
#[repr(transparent)]
|
||||||
pub(crate) struct Task<S: 'static> {
|
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))
|
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