diff --git a/tokio/src/time/driver/handle.rs b/tokio/src/time/driver/handle.rs index 38b1761c8..f79f62b46 100644 --- a/tokio/src/time/driver/handle.rs +++ b/tokio/src/time/driver/handle.rs @@ -20,6 +20,17 @@ impl Handle { /// # Panics /// /// This function panics if there is no current timer set. + /// + /// It can be triggered when `Builder::enable_time()` or + /// `Builder::enable_all()` are not included in the builder. + /// + /// It can also panic whenever a timer is created outside of a Tokio + /// runtime. That is why `rt.block_on(delay_for(...))` will panic, + /// since the function is executed outside of the runtime. + /// Whereas `rt.block_on(async {delay_for(...).await})` doesn't + /// panic. And this is because wrapping the function on an async makes it + /// lazy, and so gets executed inside the runtime successfuly without + /// panicking. pub(crate) fn current() -> Self { context::time_handle() .expect("there is no timer running, must be called from the context of Tokio runtime")