diff --git a/homeassistant/util/timeout.py b/homeassistant/util/timeout.py
index b9298501699..df225580dae 100644
--- a/homeassistant/util/timeout.py
+++ b/homeassistant/util/timeout.py
@@ -159,6 +159,7 @@ class _GlobalTaskContext:
         self._time_left: float = timeout
         self._expiration_time: float | None = None
         self._timeout_handler: asyncio.Handle | None = None
+        self._on_wait_task: asyncio.Task | None = None
         self._wait_zone: asyncio.Event = asyncio.Event()
         self._state: _State = _State.INIT
         self._cool_down: float = cool_down
@@ -223,7 +224,7 @@ class _GlobalTaskContext:
 
         # Reset timer if zones are running
         if not self._manager.zones_done:
-            asyncio.create_task(self._on_wait())
+            self._on_wait_task = asyncio.create_task(self._on_wait())
         else:
             self._cancel_task()
 
@@ -245,6 +246,7 @@ class _GlobalTaskContext:
         """Wait until zones are done."""
         await self._wait_zone.wait()
         await asyncio.sleep(self._cool_down)  # Allow context switch
+        self._on_wait_task = None
         if self.state != _State.TIMEOUT:
             return
         self._cancel_task()