Dart中如何使用await Future仅延迟指定代码行不阻塞其余代码执行
解决方案
你的需求可以通过原生Future实现,不需要额外借助其他工具函数,核心逻辑是把需要延迟执行的代码块封装为独立的异步任务,主流程不await该任务即可避免阻塞后续代码。
原代码阻塞原因
你在主流程中直接使用await Future.delayed时,await会暂停当前所在async函数的执行,直到延迟Future执行完成,所以后续的打印逻辑会等待整个for循环执行完毕才会运行。
修正后的代码示例
void main() { // 单独封装延迟执行的代码块,主流程不await该Future Future(() async { for (int i = 0; i < 5; i++) { await Future.delayed(const Duration(seconds: 1)); // 仅下面两行代码会被延迟执行 print('postpone this line of code ${i + 1}'); print('postpone me too'); } }); // 该行代码会立即执行,不会被上方的延迟任务阻塞 print('continue imediately without being postponed by await Future'); }
执行效果
运行代码后会第一时间输出continue imediately without being postponed by await Future,之后每隔1秒依次输出两行延迟打印的内容,总共执行5轮延迟输出。
注意事项
- 如果需要处理延迟任务内部的异常,可以在Future后链式调用
.catchError()方法捕获处理 - 所有需要和延迟任务并行执行的代码,都要放在启动延迟Future的代码之后,不要写入延迟Future的内部逻辑中
内容的提问来源于stack exchange,提问作者Jan
相关产品推荐
相关产品推荐

