HarmonyOS应用开发实战:猫猫大作战-taskpool 多线程并发
·


前言
taskpool 是 HarmonyOS 的任务池并发能力,将任务提交到后台线程执行,不阻塞 UI 线程。在「猫猫大作战」中,taskpool 用于后台保存游戏数据、加密战绩、以及大量数据的排序处理。
一、taskpool 基础
import { taskpool } from '@kit.ArkTS';
// 定义任务函数(必须使用 @Concurrent 装饰)
@Concurrent
function saveScoreToFile(score: number, path: string): boolean {
// 在后台线程执行文件写入
try {
// ... 文件写入逻辑
return true;
} catch {
return false;
}
}
// 提交任务
async function saveScoreAsync(score: number): Promise<void> {
const path = `${getContext().filesDir}/score.txt`;
const result = await taskpool.execute(saveScoreToFile, score, path);
console.info(`保存结果: ${result}`);
}
二、多任务并行
@Concurrent
function processMerge(cats: Cat[]): MergeResult {
// 后台执行合并检测
return detectMerges(cats);
}
@Concurrent
function updateScore(score: number): number {
return score * 2; // 模拟复杂计算
}
// 并行执行多个任务
async function parallelTasks() {
const [mergeResult, newScore] = await Promise.all([
taskpool.execute(processMerge, this.cats),
taskpool.execute(updateScore, this.score),
]);
console.info(`合并结果: ${mergeResult}, 得分: ${newScore}`);
}
三、taskpool vs Worker
| 特性 | taskpool | Worker |
|---|---|---|
| 创建方式 | 动态提交 | 预创建 |
| 资源管理 | 自动管理 | 手动管理 |
| 数据传递 | 结构化克隆 | 结构化克隆 |
| 适用场景 | 频繁小任务 | 长耗时大任务 |
| 复杂度 | 低 | 高 |
四、游戏中的应用
// 游戏结束时异步保存
endGame() {
// 1. 先切换 UI
this.gameState = GameState.GAME_OVER;
// 2. 后台保存
taskpool.execute(saveGameData, {
score: this.score,
cats: this.gameEngine.getAllCats(),
timestamp: Date.now(),
});
// 3. 同时异步加密
taskpool.execute(encryptScore, this.score);
}
五、限制说明
- 任务函数必须
@Concurrent装饰 - 参数必须是结构化克隆兼容类型(不能传函数、Class 实例)
- 不可访问 UI 线程的变量(如
getContext()) - 避免长时间任务(单任务建议 < 3 秒)
总结
taskpool 提供简单高效的后台并发能力,适合游戏中的异步数据保存和计算。核心要点:@Concurrent 标记任务函数、 taskpool.execute 提交执行、 多任务 Promise.all 并行、 不阻塞 UI 线程。
如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!
相关资源:
更多推荐



所有评论(0)