Browse Source

[tasks] Move the Loop's sleep to be before exit conditions

This change makes it more so that `Loop.stop()` gracefully makes the
current iteration the final one, by waiting AND THEN returning.
The current implementation is closer to `cancel`, while also not.

I encountered this because I was trying to run a
`@tasks.loop(count=1)`, and inside it I print some text and change the
interval, and in an `after_loop`, I restart the loop.

Without this change, it immediately floods my console, due to
not waiting before executing `after_loop`.
pull/6747/head
Steve C 4 years ago
committed by GitHub
parent
commit
ef9bb79e91
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      discord/ext/tasks/__init__.py

4
discord/ext/tasks/__init__.py

@ -111,13 +111,13 @@ class Loop:
raise
await asyncio.sleep(backoff.delay())
else:
await sleep_until(self._next_iteration)
if self._stop_next_iteration:
return
self._current_loop += 1
if self._current_loop == self.count:
break
await sleep_until(self._next_iteration)
except asyncio.CancelledError:
self._is_being_cancelled = True
raise

Loading…
Cancel
Save