diff --git a/fastimer/src/schedule/arbitrary.rs b/fastimer/src/schedule/arbitrary.rs index 3e6c0a8..9acafd3 100644 --- a/fastimer/src/schedule/arbitrary.rs +++ b/fastimer/src/schedule/arbitrary.rs @@ -66,7 +66,12 @@ pub trait ArbitraryDelayActionExt: ArbitraryDelayAction { if let Some(initial_delay) = initial_delay { if initial_delay > Duration::ZERO { - make_delay.delay(initial_delay).await; + let is_shutdown = self.is_shutdown(); + let delay = make_delay.delay(initial_delay); + if let Either::Left(()) = select(is_shutdown, delay).await { + self.teardown(); + return; + } } } diff --git a/fastimer/src/schedule/simple.rs b/fastimer/src/schedule/simple.rs index 90f568d..6148228 100644 --- a/fastimer/src/schedule/simple.rs +++ b/fastimer/src/schedule/simple.rs @@ -76,7 +76,12 @@ pub trait SimpleActionExt: SimpleAction { if let Some(initial_delay) = initial_delay { if initial_delay > Duration::ZERO { - make_delay.delay(initial_delay).await; + let is_shutdown = self.is_shutdown(); + let delay = make_delay.delay(initial_delay); + if let Either::Left(()) = select(is_shutdown, delay).await { + self.teardown(); + return; + }; } } @@ -159,7 +164,12 @@ pub trait SimpleActionExt: SimpleAction { if let Some(initial_delay) = initial_delay { if initial_delay > Duration::ZERO { next = make_instant_from_now(initial_delay); - make_delay.delay_util(next).await; + let is_shutdown = self.is_shutdown(); + let delay = make_delay.delay_util(next); + if let Either::Left(()) = select(is_shutdown, delay).await { + self.teardown(); + return; + }; } }