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

Dart:如何在周期性Timer中避免使用sleep实现延迟?

替代sleep实现Timer任务内的延迟

sleep()是dart:io库中的同步阻塞方法,它会暂停当前隔离(Isolate)的所有执行,直到指定时长结束。这种特性在异步场景下会导致UI卡顿、其他任务被阻塞,完全不符合异步操作的需求,所以我们可以用异步的Future.delayed()来替代它。

修改后的代码如下:

Timer.periodic(const Duration(minutes: 1), (timer) async {
  for (final brightness in [15, 50]) {
    // 这里写设置亮度的代码
    await Future.delayed(
      Duration(milliseconds: brightness == 15 ? 58200 : 1800)
    );
  }
});

说明:

  • 把Timer的回调函数改为async,这样就能在内部使用await关键字等待异步延迟完成。
  • Future.delayed()是异步操作,它不会阻塞当前线程,只会在指定时长后执行后续代码,完全适配异步场景的需求。
  • 你当前的延迟总时长(58200ms + 1800ms = 60000ms = 1分钟)刚好和Timer的周期一致,不会出现任务重叠的问题;如果后续调整延迟时间,建议添加任务状态检查,避免同一个Timer周期内的任务还未完成就开始下一次执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:26:02