diff --git a/src/frequenz/channels/timer.py b/src/frequenz/channels/timer.py index b2f0338a..648fe5d9 100644 --- a/src/frequenz/channels/timer.py +++ b/src/frequenz/channels/timer.py @@ -682,14 +682,17 @@ async def ready(self) -> bool: # noqa: DOC502 # could be reset while we are sleeping, in which case we need to recalculate # the time to the next tick and try again. while time_to_next_tick > 0: - await next( - asyncio.as_completed( - [ - asyncio.sleep(time_to_next_tick / 1_000_000), - self._reset_event.wait(), - ] - ) - ) + tasks = [ + asyncio.create_task(asyncio.sleep(time_to_next_tick / 1_000_000)), + asyncio.create_task(self._reset_event.wait()), + ] + + try: + await next(asyncio.as_completed(tasks)) + finally: + tasks[0].cancel() + tasks[1].cancel() + self._reset_event.clear() now = self._now() time_to_next_tick = self._next_tick_time - now