You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中递归调用Future.delayed实现间隔刷新是否会引发栈溢出

结论

你当前的写法不会导致栈溢出,但代码逻辑存在错误,无法实现你预期的「两次查询间隔30秒」的效果。

不会栈溢出的原因

Dart的异步执行基于事件循环模型,async/await语法的本质是将await之后的代码包装为异步回调,调度到事件队列中等待执行,不会产生同步递归的调用栈堆叠,因此不存在栈溢出风险。

现有代码的问题

你写的await Future.delayed(Duration(seconds: 30), onRefresh);存在两个逻辑缺陷:

  • 30秒延迟结束后会直接触发onRefresh执行,同时你又await了这个延迟Future的完成,相当于同时存在两条独立的onRefresh执行流,没有实现间隔等待的效果
  • 没有停止机制,只要应用不退出,刷新逻辑会永远执行,无法手动控制启停

正确实现方案

你可以用死循环加await的方式实现需求,完全匹配你「上一次查询结束后间隔30秒再执行下一次」的要求:

// 定义一个控制启停的布尔变量,组件销毁/需要停止刷新时设为false即可
bool _isAutoRefreshActive = true;

Future<void> runAutoRefresh() async {
  while (_isAutoRefreshActive) {
    // 执行你的耗时查询逻辑
    await yourLongTimeQueryFunction();
    // 查询完成后等待30秒再进入下一轮循环
    await Future.delayed(const Duration(seconds: 30));
  }
}

内容的提问来源于stack exchange,提问作者s k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 19:48:02