P340 · 任务流程

收齐完成事件后再停止监听

Drain Completion before Stopping the Observer

产生结果的进程还在收尾时,保持观察者运行,避免漏掉最后的完成事件。

编辑审核

以下示例与示意结果由本站编写,用于说明方法,不是模型实测结果。

使用场景

采集任务 run-a 停止后还要导出,产物事件可能晚于采集进程结束。教学日志还含旧 run-b 的 exported 事件;本轮只等待 run-a 的终态。过早结束观察者会丢掉最后证据,看到旧事件也不能算本次完成。

具体做法

按协议停止拥有的生产者,保持观察者用于最终处理。在有界期限内筛选匹配当前运行身份的完成或失败事件,保存产物身份与状态。取得结果或明确未决超时后,清理本次拥有的观察者;断连与模糊超时需查询状态对账,不再启动一个重复采集。

反例

先杀监听器,再停 run-a;日志里有 run-b 的 exported 就报告本轮完成,不等待 run-a 或保存产物身份。

改进写法

停止教学 run-a 生产者而保留观察者,按服务契约等待当前 run-a 的 exported/failed,不接纳 run-b 旧事件。记录实际终态和产物 id后清理拥有的观察者。期限到但结果未知时报告 run-a 未确认并按可用状态接口对账,再处理清理,不盲目重启或宣称完成。所有进程按当前归属核对。

为什么这样改

生产者停止可能启动最后导出,不代表导出结束。保留观察者和运行身份筛选,让停止、完成以及旧日志三者不被混淆,也让清理有明确时机。

如何验证

教学序列 stop run-a→run-b exported→run-a exported,应只由最后一项确认本轮并保留它的产物 id。run-a failed 或超时分别报告失败/未确认。

检查观察者没有提前终止、旧事件未放行;收到回执也不自动证明产物质量。

适用边界

具体事件、关闭和对账方式依当前服务,来源的 PID 与路径不是当前机器值。回执不保证永久可用或高质量,清理只能针对拥有的资源;本例不启动或停止真实采集。

原文与版本

如何收录这些方法