Skip to main content

run_with_timeout

Function run_with_timeout 

Source
pub async fn run_with_timeout<F, T, E>(
    kind: BackendKind,
    timeout: Option<Duration>,
    fut: F,
) -> Result<T, E>
where F: Future<Output = Result<T, E>>, E: TimeoutError,
Expand description

给一次出站调用套一层超时。

None 表示禁用超时,直接透传结果。超时发生时递增 timeout_counter 的对应 维度,并返回 E::from_timeout。

None 才是禁用;Some(Duration::ZERO) 是「立刻超时」,不是禁用 —— 本仓别处「0 = 禁用」的惯例(如 ecat-data-sqlx/src/config.rs 的 query_timeout_secs)在这里不适用,别照着填。tokio 先 poll 内层:已就绪的 future 仍会成功,只有挂着的才当场判超时。

这是池耗尽的头号防线:acquire_timeout 只约束「等连接」, 拿到连接后卡死的查询会一直占着它。