I2.13.2stop auto-retry and hand off设计

多次自动重试失败后应停止并转交用户手动决定

别名: 重试转交用户 · 自动重试上限 · give up to the user

概念解释

自动重试是系统替人采样通道。采样几次仍失败,通道这次大概不是「再等 400 毫秒就好」。继续自动只是把退避曲线拉长,人被留在一块自己不能改的等待里。转交是停掉自动,把决定权交回:再试一次、改条件、取消、离线做别的。上限不是脾气,是承认自动这一档已经用尽。

机制

瞬态故障的寿命短,两三次带退避的尝试已经覆盖「丢包 + 短暂过载」这类分布的大部分。再往后,失败更可能来自持续的条件:鉴权过期、对象没了、服务在维护、本地离线。自动重试对这些条件没有新信息,只会推迟人采取其他策略的时刻。人在自动还在跑时很难插入:取消可能和下一次自动撞车,改参数不知道会不会被下一次覆盖。

转交要把自动这一层的结束说清楚:「已重试 n 次,仍无法加载」,然后出现就近的手动动作。若转交之后自动还在暗处跑,人点手动会变成又一次双发,转交是假的。停,是真的停。

边界

后台任务、同步队列可以有更长的自动预算,因为人不在盯;但仍要有上限,并在任务列表里变成失败态等人处理,而不是无限退。用户刚刚点了手动重试,计数应单独算一次新的自动预算,不要把上一轮的次数直接累加到「你又失败了」。对端用 Retry-After 给出明确冷静期时,应遵守,不要因为「已经转交」就让人手动去打还在冷静的门——手动也要看见冷静期。安全写操作在转交时更应停自动,避免在人已经走开之后还在暗处付款。

怎么落地

  • 给自动重试一个小的次数或总时长上限(例如 3 次或十几秒)。到了就停,进入失败呈现。
  • 转交文案包含「已经自动试过」,以免人以为一次都没试就在要他点。
  • 停之后不再发自动请求,直到人手动或网络恢复事件显式启动新一轮。
  • 验证:持续失败。界面应在有限几次后停止网络活动,并出现可点的下一步。若过了一分钟请求还在按退避往外打,转交就没发生。

延伸

  • 同组I2.13.1 自动重试需要退避间隔而非立即连续重试加重服务器负担 · I2.13.3 重试是否使用原参数还是允许用户修改需求后再试需要明确 · I2.13.4 反复失败的模式提示可能是更系统性的问题而非偶发网络波动
  • 相邻I2.08 加载失败 · I2.06 等待中的取消 · I3.07 后台任务
  • 站内检索retry budget · handoff to user · stop automatic retry

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/I2.13.2