如何在Dart中等待函数返回值时运行while循环?
Dart:等待异步函数时循环执行任务
要实现等待myFunction完成的过程中循环打印contacting server,核心是让异步函数和循环并行执行——直接await会阻塞当前代码,导致循环无法同时运行。以下是具体实现:
void main() async { print("Function Starting"); // 启动异步任务,暂不等待 final serverFuture = myFunction(); var isTaskCompleted = false; // 任务完成时标记状态 serverFuture.then((_) => isTaskCompleted = true); // 循环打印直到任务完成 while (!isTaskCompleted) { print('contacting server'); // 延迟500毫秒,避免占用过多CPU资源 await Future.delayed(const Duration(milliseconds: 500)); } // 获取并打印异步任务结果 final result = await serverFuture; print(result); } Future<String> myFunction() { return Future.delayed(const Duration(seconds: 5), () => "Function completed"); }
关键说明:
- 先启动
myFunction并保存Future对象,异步任务会立刻开始执行,不会被后续循环阻塞。 - 通过
then回调监听任务完成事件,一旦任务结束就修改isTaskCompleted变量,触发循环终止。 - 循环中的
await Future.delayed是必要的:它会让出Dart的事件循环,让异步任务有机会执行,同时避免无限制循环占用CPU。 - 最后再次
await serverFuture时,任务已经完成,会直接返回结果,不会产生额外等待。
内容的提问来源于stack exchange,提问作者RishV
相关产品推荐
相关产品推荐

