fix(agent): snapshot active tasks before cancellation

This commit is contained in:
chengyongru 2026-07-28 15:40:07 +08:00 committed by chengyongru
parent ce3e532643
commit 78cf68c291
2 changed files with 4 additions and 2 deletions

View File

@ -760,7 +760,7 @@ class AgentLoop:
Returns the total number of cancelled tasks + subagents.
"""
tasks = self._active_tasks.pop(key, set())
tasks = tuple(self._active_tasks.pop(key, set()))
cancelled = sum(1 for t in tasks if not t.done() and t.cancel())
for t in tasks:
with suppress(asyncio.CancelledError, Exception):

View File

@ -73,7 +73,9 @@ class TestHandleStop:
task = asyncio.create_task(slow_task())
await asyncio.sleep(0)
loop._active_tasks["test:c1"] = {task}
active_tasks = {task}
loop._active_tasks["test:c1"] = active_tasks
task.add_done_callback(active_tasks.discard)
msg = InboundMessage(channel="test", sender_id="u1", chat_id="c1", content="/stop")
ctx = CommandContext(msg=msg, session=None, key=msg.session_key, raw="/stop", loop=loop)