11from __future__ import annotations
22
33import logging
4- from asyncio import Task , create_task , sleep
4+ from asyncio import Task , create_task , current_task , sleep
55from time import monotonic
66from traceback import format_exc
77from typing import Any , Callable , Coroutine , Final
@@ -40,16 +40,17 @@ def start(self) -> None:
4040 return None
4141
4242 def cancel (self ) -> None :
43- if self .task is None :
43+ if ( task := self .task ) is None :
4444 return None
4545
46- self .task .cancel ()
4746 self .task = None
47+ task .cancel ()
48+ return None
4849
4950 async def coro_wrap (self ) -> None :
5051 log .debug (f'Started { self .name } ' )
5152 task = self .task
52- assert task is not None
53+ assert task is current_task ()
5354
5455 try :
5556 await self .coro ()
@@ -65,7 +66,7 @@ class ExceptionIgnoringTask(SimpleBackgroundTask):
6566 async def coro_wrap (self ) -> None :
6667 log .debug (f'Started { self .name } ' )
6768 task = self .task
68- assert task is not None
69+ assert task is current_task ()
6970
7071 wait = 0
7172
@@ -80,10 +81,7 @@ async def coro_wrap(self) -> None:
8081
8182 # simple sleep logic with an increasing timeout
8283 time_to_exception = monotonic () - start
83- if time_to_exception < 16 or time_to_exception < wait :
84- wait = max (2 , wait * 2 )
85- else :
86- wait = 0
84+ wait = max (2 , wait * 2 ) if time_to_exception < 16 or time_to_exception < wait else 0
8785
8886 log .debug (f'Retry in { wait :d} seconds' )
8987 finally :
0 commit comments