P285 · 工具调用

等待明确的就绪条件

Wait on a fresh observable predicate

用刚读取的可观察条件判断是否就绪,并设置超时,避免猜测等待时间。

编辑审核

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

使用场景

导出任务在不同负载下耗时不同,测试需要读取 job-7 的结果。教学 getter 初始返回 pending,随后返回 ready 与结果路径;等待固定50毫秒不能证明该任务完成。

具体做法

先确定判据:job-7状态为ready且结果可读取。每次观察都重新调用getter,不能循环检查此前缓存的pending。使用约定的总超时和适当轮询间隔,或订阅能覆盖竞态的事件;条件成立才读取结果。遇到failed立即报告原因,超时报告任务ID、最后状态与未满足条件。

反例

测试job-7导出:等50毫秒,读取结果文件,偶尔失败就把等待改成500毫秒。

改进写法

测试job-7导出:最多等待2秒,每次读取当前任务状态。ready且结果可读才继续;failed立即失败,超时输出最后状态及缺少的结果。不要靠增加固定延时消除失败。2秒是本教学测试预算,并非服务性能承诺。

为什么这样改

固定延时同时可能太短或过长。围绕任务自身的新鲜状态等待,将继续执行与实际就绪关联,也让失败有可解释的出口。

如何验证

用模拟getter依次返回pending、pending、ready,应在第三次观察后读取一次。一直pending应超时且不读取;第二次failed应直接报告失败。核对每次getter调用,防止只检查缓存。以上是教学轨迹。

适用边界

判据必须对应真实需求:文件存在不一定代表写完,ready后资源也可能变化。生产环境可需要原子读取或版本绑定。轮询间隔与总预算按系统负载选择;测试定时器本身的时间行为需要不同的时间判据。

原文与版本

如何收录这些方法