第一次:给了 30 秒超时,跑数据库查询经常超。改成 120 秒,结果一次卡死把整个会话拖住。

第二次:只设总超时,没有中间反馈。用户看不到进度,以为挂了。

第三次才成型,三层设计:

  1. 单次调用超时 30 秒,但支持流式返回进度(长任务每 5 秒吐一行心跳)
  2. 总任务超时 10 分钟,到点强制中止并返回已完成部分
  3. 中止后可恢复:把已完成的分片和剩余任务落盘,下次接着跑

第三层最关键。批量处理 500 个文件,跑到 380 个被掐,没有断点续跑就得从头来。

另一个细节:超时时间不要写死在代码里,放配置。不同的工具差异太大,查本地文件 3 秒够,调外部 API 要 60 秒。

主楼