[tasks] Don't update _next_iteration on retry

This commit is contained in:
Josh 2020-08-29 13:12:07 +10:00 committed by Rapptz
parent 40de807c16
commit b3e0752af4

View File

@ -68,6 +68,7 @@ class Loop:
raise ValueError('count must be greater than 0 or None.')
self.change_interval(seconds=seconds, minutes=minutes, hours=hours)
self._last_iteration_failed = False
self._last_iteration = None
self._next_iteration = None
@ -88,18 +89,22 @@ class Loop:
backoff = ExponentialBackoff()
await self._call_loop_function('before_loop')
sleep_until = discord.utils.sleep_until
self._last_iteration_failed = False
self._next_iteration = datetime.datetime.now(datetime.timezone.utc)
try:
await asyncio.sleep(0) # allows canceling in before_loop
while True:
self._last_iteration = self._next_iteration
self._next_iteration = self._get_next_sleep_time()
if not self._last_iteration_failed:
self._last_iteration = self._next_iteration
self._next_iteration = self._get_next_sleep_time()
try:
await self.coro(*args, **kwargs)
self._last_iteration_failed = False
now = datetime.datetime.now(datetime.timezone.utc)
if now > self._next_iteration:
self._next_iteration = now
except self._valid_exception as exc:
self._last_iteration_failed = True
if not self.reconnect:
raise
await asyncio.sleep(backoff.delay())