在这里插入图片描述

一、async/await语法

async/await让异步代码看起来像同步代码,提高可读性。

成功

失败

async函数

await Future

等待完成

结果类型

返回值

抛出异常

二、顺序下载示例

Future<void> _downloadAllImages() async {
  setState(() {
    _isLoading = true;
    _error = null;
    _images.clear();
  });

  try {
    for (int i = 0; i < 5; i++) {
      final imageUrl = await _downloadImage(i);
      _images.add(imageUrl);
      if (mounted) setState(() {});
    }

    setState(() {
      _isLoading = false;
    });
  } catch (e) {
    setState(() {
      _error = e.toString();
      _isLoading = false;
    });
  }
}

三、并发下载示例

Future<void> _downloadImagesParallel() async {
  setState(() {
    _isLoading = true;
    _error = null;
    _images.clear();
  });

  try {
    final futures = List.generate(5, (index) => _downloadImage(index));
    final results = await Future.wait(futures, eagerError: true);

    setState(() {
      _images = results;
      _isLoading = false;
    });
  } catch (e) {
    setState(() {
      _error = e.toString();
      _isLoading = false;
    });
  }
}

四、性能对比

下载策略耗时对比(5张图片,每张1秒) 顺序下载 并发下载 6 5.5 5 4.5 4 3.5 3 2.5 2 1.5 1 0.5 0 耗时(秒)
策略 总耗时 适用场景
顺序下载 5秒 有依赖关系
并发下载 1秒 独立任务

五、最佳实践

有依赖

独立任务

开始下载

选择策略

顺序下载

并发下载

逐个await

Future.wait

更新进度

成功?

显示结果

显示错误

要点

  • 优先使用并发下载提升速度
  • 及时更新UI进度
  • 合理处理错误
  • 注意内存占用

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐