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

如何在Dart/Flutter中使用async/await实现并行处理?

Dart/Flutter 实现对应异步并行逻辑的方法

Dart的async/await语法设计和C#非常接近,你描述的「先启动异步任务、执行其他操作、最后等待任务完成」的逻辑可以直接对齐实现,核心是利用Future(对应C#的Task)的特性:调用async函数时如果不立刻await,拿到返回的Future时任务就已经启动,不会阻塞后续同步代码执行。

基础写法(对应C#示例)

和你给出的C#代码几乎一一对应:

// 使用await的方法需要添加async关键字
void main() async {
  // 1. 启动异步任务,拿到Future实例,此时任务已经开始执行,不会阻塞后续代码
  var t = myFunctionAsync();
  // 2. 执行其他同步操作
  executeTask1();
  executeTask2();
  // 3. 等待异步任务执行完成,获取执行结果
  await t;
}

注意:如果在调用myFunctionAsync()时提前加了await,就会变成同步等待任务执行完才走后续代码,完全失去并行效果,这点和C#的行为完全一致。

不同场景的注意事项

Dart是基于单Isolate(可理解为单线程事件循环)的模型,和C#默认线程池调度Task的逻辑有差异,需要根据任务类型选择实现:

  • 对于IO类异步任务(网络请求、文件读写、数据库操作、平台通道调用等):直接用上面的基础写法即可,这类任务执行时会让出事件循环,不会阻塞后续同步代码,可以实现预期的交错执行效果。
  • 对于CPU密集型计算任务(大图压缩、大体积JSON解析、海量数据计算等):普通Future默认运行在主Isolate,会直接阻塞事件循环,后续的executeTask1/executeTask2必须等计算任务执行完才会运行,无法实现并行。这时候需要把计算任务放到独立Isolate中执行,才能真正利用多核实现并行:
    import 'dart:isolate';
    
    void main() async {
      // 将CPU密集任务提交到独立Isolate运行,返回的Future用法和普通Future完全一致
      var t = Isolate.run(() => myCpuHeavyFunction());
      executeTask1();
      executeTask2();
      var result = await t;
    }
    
    如果是Flutter环境,也可以用框架封装的compute顶层函数,更方便传递参数,本质也是创建独立Isolate执行计算任务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:36:26