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
相关产品推荐
相关产品推荐

