pub async fn run_with_timeout<F, T, E>(
kind: BackendKind,
timeout: Option<Duration>,
fut: F,
) -> Result<T, E>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 只约束「等连接」,
拿到连接后卡死的查询会一直占着它。