1 use std::marker::PhantomData; 2 3 impl TaskHooks { spawn(&self, meta: &TaskMeta<'_>)4 pub(crate) fn spawn(&self, meta: &TaskMeta<'_>) { 5 if let Some(f) = self.task_spawn_callback.as_ref() { 6 f(meta) 7 } 8 } 9 } 10 11 #[derive(Clone)] 12 pub(crate) struct TaskHooks { 13 pub(crate) task_spawn_callback: Option<TaskCallback>, 14 pub(crate) task_terminate_callback: Option<TaskCallback>, 15 } 16 17 /// Task metadata supplied to user-provided hooks for task events. 18 /// 19 /// **Note**: This is an [unstable API][unstable]. The public API of this type 20 /// may break in 1.x releases. See [the documentation on unstable 21 /// features][unstable] for details. 22 /// 23 /// [unstable]: crate#unstable-features 24 #[allow(missing_debug_implementations)] 25 #[cfg_attr(not(tokio_unstable), allow(unreachable_pub))] 26 pub struct TaskMeta<'a> { 27 /// The opaque ID of the task. 28 pub(crate) id: super::task::Id, 29 pub(crate) _phantom: PhantomData<&'a ()>, 30 } 31 32 impl<'a> TaskMeta<'a> { 33 /// Return the opaque ID of the task. 34 #[cfg_attr(not(tokio_unstable), allow(unreachable_pub, dead_code))] id(&self) -> super::task::Id35 pub fn id(&self) -> super::task::Id { 36 self.id 37 } 38 } 39 40 /// Runs on specific task-related events 41 pub(crate) type TaskCallback = std::sync::Arc<dyn Fn(&TaskMeta<'_>) + Send + Sync>; 42