You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何终止所有Live Activities?执行代码后活动仍未消失

解决Live Activities无法全部终止的问题

你的代码问题出在两个核心点:

  • Activity<MyAttributes>.activities是动态集合,遍历过程中集合可能因活动状态变化发生变动,导致部分活动被遗漏
  • 每个activity.end放在独立Task里异步执行,程序不会等待所有终止操作完成就继续,部分活动的终止请求可能没被正确处理

修正方案一:先快照所有活动再串行终止

先把当前活动集合快照到数组,避免遍历过程中集合动态变化,再逐个串行执行终止操作:

// 先获取当前所有活动的快照,固定遍历范围
let currentActivities = Activity<MyAttributes>.activities
for activity in currentActivities {
    await activity.end(nil, dismissalPolicy: .immediate)
}

修正方案二:用TaskGroup确保所有操作完成

通过TaskGroup管理所有终止任务,确保每个活动的终止请求都执行完毕:

await withTaskGroup(of: Void.self) { group in
    // 同样先快照活动集合,避免遍历中集合变动
    for activity in Activity<MyAttributes>.activities {
        group.addTask {
            await activity.end(nil, dismissalPolicy: .immediate)
        }
    }
    // 自动等待所有任务执行完成
}

额外排查点:如果仍有活动残留,检查是否存在属性类型不匹配MyAttributes的活动,这类活动需要对应类型的Activity实例来获取和终止。

内容的提问来源于stack exchange,提问作者Sergio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 19:02:33