feat: 增强组件注册和事件分发,添加会话令牌恢复功能,优化工作流执行超时处理

This commit is contained in:
DrSmoothl
2026-03-12 23:53:15 +08:00
parent 4b7ee3923c
commit c620040191
6 changed files with 34 additions and 13 deletions

View File

@@ -51,6 +51,8 @@ class EventDispatcher:
self._registry: ComponentRegistry = registry
self._result_history: Dict[str, List[EventResult]] = {}
self._history_enabled: Set[str] = set()
# 保持 fire-and-forget task 的强引用,防止被 GC 回收
self._background_tasks: Set[asyncio.Task] = set()
def enable_history(self, event_type: str) -> None:
self._history_enabled.add(event_type)
@@ -87,7 +89,6 @@ class EventDispatcher:
should_continue = True
modified_message: Optional[Dict[str, Any]] = None
fire_and_forget_tasks: List[asyncio.Task] = []
for handler in handlers:
intercept = handler.metadata.get("intercept_message", False)
@@ -105,16 +106,12 @@ class EventDispatcher:
if result and result.modified_message:
modified_message = result.modified_message
else:
# 非阻塞
# 非阻塞:保持实例级强引用,防止 task 被 GC 回收
task = asyncio.create_task(
self._invoke_handler(invoke_fn, handler, args, event_type)
)
fire_and_forget_tasks.append(task)
# 不等待 fire-and-forget 任务(但不丢弃引用以防 GC
if fire_and_forget_tasks:
for t in fire_and_forget_tasks:
t.add_done_callback(lambda _t: None)
self._background_tasks.add(task)
task.add_done_callback(self._background_tasks.discard)
return should_continue, modified_message