文章配图:taskpool-execute 任务提交

页面预览

前言

taskpool.execute 将任务函数提交到后台线程池执行。在「猫猫大作战」中,通过 taskpool.execute 提交耗时计算和文件 I/O 操作,避免阻塞 UI 线程。

一、execute 基础

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

@Concurrent
function computeScore(cats: Cat[]): number {
  let score = 0;
  for (const cat of cats) {
    score += CatConfig[cat.level].score;
  }
  return score;
}

async function calculateScoreAsync(cats: Cat[]): Promise<number> {
  const result = await taskpool.execute(computeScore, cats);
  return result;
}

二、多参数任务

@Concurrent
function saveGameData(score: number, time: number, player: string): boolean {
  // 后台保存
  console.info(`保存游戏: ${player}, ${score}分, ${time}`);
  return true;
}

// 提交多参数
await taskpool.execute(saveGameData, this.score, this.gameTime, this.playerName);

三、优先级

// 高优先级任务(如保存数据)
taskpool.execute(saveGameData, score, time, player, taskpool.Priority.HIGH);

// 低优先级任务(如数据统计)
taskpool.execute(computeStats, data, taskpool.Priority.LOW);
优先级 常量 适用场景
HIGH Priority.HIGH 用户主动触发
MEDIUM Priority.MEDIUM 一般后台任务
LOW Priority.LOW 非关键统计

四、执行限制

限制 说明
函数必须 @Concurrent 编译检查
参数可序列化 基本类型、Array、对象
无闭包引用 不能引用外部变量
单次执行 < 3 分钟 超时自动终止

五、最佳实践

  1. 耗时操作用 taskpool:文件 I/O、大量计算
  2. UI 操作不要放在 taskpool:不能在后台线程更新 UI
  3. 设置合理优先级:用户主动操作用 HIGH
  4. 错误处理:taskpool 内 try-catch

总结

taskpool.execute 提交任务到后台线程,保持 UI 流畅。核心要点:@Concurrent 标记函数、 execute(fn, ...args) 提交、 优先级控制执行顺序

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


相关资源:

Logo

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

更多推荐