文章配图:task-group 任务组并发

页面预览

前言

TaskGroup 是 taskpool 中管理一组并发任务的机制。在「猫猫大作战」中,TaskGroup 用于并行计算得分排行榜批量保存数据等场景。

一、TaskGroup 基础

import { taskpool } from '@kit.ArkTS';

@Concurrent
function computeScore(score: number, multiplier: number): number {
  return score * multiplier;
}

@Concurrent
function saveData(data: string): boolean {
  console.info(`保存: ${data}`);
  return true;
}

async function runBatch(): Promise<void> {
  const group = new taskpool.TaskGroup();

  // 添加任务
  group.addTask(computeScore, 100, 2);
  group.addTask(computeScore, 200, 3);
  group.addTask(saveData, 'game_record_001');

  // 并行执行
  const results = await taskpool.execute(group);
  console.info(`结果: ${JSON.stringify(results)}`);
}

二、分组并发

@Concurrent
function uploadScore(score: number): boolean {
  // 模拟上传
  return true;
}

@Concurrent
function saveLocal(data: string): boolean {
  return true;
}

@Concurrent
function logAnalytics(event: string): void {
  console.info(`统计: ${event}`);
}

// 游戏结束时多任务并行
async function onGameEnd(score: number): Promise<void> {
  const group = new taskpool.TaskGroup();
  group.addTask(uploadScore, score);
  group.addTask(saveLocal, JSON.stringify({ score, time: Date.now() }));
  group.addTask(logAnalytics, 'game_end');

  await taskpool.execute(group);
}

三、TaskGroup vs Promise.all

特性 TaskGroup Promise.all
执行环境 后台线程 UI 线程
并行度 线程池调度 同线程
阻塞 UI 不阻塞 阻塞
适用场景 CPU 密集型 I/O 密集型

四、最佳实践

  1. CPU 密集用 TaskGroup:游戏引擎中的计算
  2. 数量控制:单组任务不超过 10 个
  3. 错误处理try-catch 包裹 execute
  4. 结果收集:返回值为数组,按添加顺序排列

总结

TaskGroup 管理一组后台并发任务,游戏结束时并行处理数据保存和上传。核心要点:new TaskGroup() 创建、 addTask 添加、 execute(group) 并行执行

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐