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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:00:02