aboutsummaryrefslogtreecommitdiff
path: root/discord/ext/tasks
diff options
context:
space:
mode:
authorSteve C <[email protected]>2021-04-16 22:35:18 -0400
committerGitHub <[email protected]>2021-04-16 22:35:18 -0400
commitef9bb79e91a6b7b03f9faf61f1f7cc59eefe15f1 (patch)
treed4c81ac874888d4f9faed486a77b44ccc9c8f450 /discord/ext/tasks
parentRevert Attachment.save code to prior implementation (diff)
downloaddiscord.py-ef9bb79e91a6b7b03f9faf61f1f7cc59eefe15f1.tar.xz
discord.py-ef9bb79e91a6b7b03f9faf61f1f7cc59eefe15f1.zip
[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`.
Diffstat (limited to 'discord/ext/tasks')
-rw-r--r--discord/ext/tasks/__init__.py4
1 files changed, 2 insertions, 2 deletions
diff --git a/discord/ext/tasks/__init__.py b/discord/ext/tasks/__init__.py
index 240fc42e..d2ae2c75 100644
--- a/discord/ext/tasks/__init__.py
+++ b/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