等待明确的就绪条件
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后资源也可能变化。生产环境可需要原子读取或版本绑定。轮询间隔与总预算按系统负载选择;测试定时器本身的时间行为需要不同的时间判据。