鸿蒙ArkTS实战开发:同步任务 (TaskPool和Worker),2024年最新HarmonyOS鸿蒙开发零基础教学

95 阅读5分钟

static syncSet(num: number): number { // 模拟同步步骤1 console.info("taskpool: this is 1st print!"); // 模拟同步步骤2 console.info("taskpool: this is 2nd print!"); return num++; } }

业务使用TaskPool调用相关同步方法的代码。

// Index.ets代码 import taskpool from '@ohos.taskpool'; import Handle from './Handle'; // 返回静态句柄

// 步骤1: 定义并发函数,内部调用同步方法 @Concurrent function func(num: number): boolean { // 调用静态类对象中实现的同步等待调用 Handle.syncSet(num); return true; }

// 步骤2: 创建任务并执行 async function asyncGet(): Promise { // 创建task并传入函数func let task: taskpool.Task = new taskpool.Task(func, 1); // 执行task任务 let res: boolean = await taskpool.execute(task) as boolean; // 打印任务结果 console.info("taskpool: task res is: " + res); }

@Entry @Component struct Index { @State message: string = 'Hello World';

build() { Row() { Column() { Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) .onClick(() => { // 步骤3: 执行并发操作 asyncGet(); }) } .width('100%') .height('100%') } } }

使用Worker处理关联的同步任务

当一系列同步任务需要使用同一个句柄调度,或者需要依赖某个类对象调度,无法在不同任务池之间共享时,需要使用Worker。

  1. 在主线程中创建Worker对象,同时接收Worker线程发送回来的消息。

import worker from '@ohos.worker';

@Entry @Component struct Index { @State message: string = 'Hello World';

build() { Row() { Column() { Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) .onClick(() => { let w: worker.ThreadWorker = new worker.ThreadWorker('entry/ets/workers/MyWorker.ts'); w.onmessage = (): void => { // 接收Worker子线程的结果 } w.onerror = (): void => { // 接收Worker子线程的错误信息 } // 向Worker子线程发送Set消息 w.postMessage({'type': 0, 'data': 'data'}) // 向Worker子线程发送Get消息 w.postMessage({'type': 1}) // ... // 根据实际业务,选择时机以销毁线程 w.terminate() }) } .width('100%') } .height('100%') } }

  1. 在Worker线程中绑定Worker对象,同时处理同步任务逻辑。

// handle.ts代码 export default class Handle { syncGet() { return; }

syncSet(num: number) { return; } }

// MyWorker.ts代码 import worker, { ThreadWorkerGlobalScope, MessageEvents } from '@ohos.worker'; import Handle from './handle' // 返回句柄

let workerPort : ThreadWorkerGlobalScope = worker.workerPort;

// 无法传输的句柄,所有操作依赖此句柄 let handler: Handle = new Handle()

// Worker线程的onmessage逻辑 workerPort.onmessage = (e : MessageEvents): void => { switch (e.data.type as number) { case 0: handler.syncSet(e.data.data); workerPort.postMessage('success set'); case 1: handler.syncGet(); workerPort.postMessage('success get'); } }

最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。 

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(**ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony****多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)**技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

如果你是一名有经验的资深Android移动开发、Java开发、前端开发、对鸿蒙感兴趣以及转行人员,可以直接领取这份资料

获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料****

鸿蒙(HarmonyOS NEXT)最新学习路线

  • HarmonOS基础技能

  • HarmonOS就业必备技能 
  • HarmonOS多媒体技术

  • 鸿蒙NaPi组件进阶

  • HarmonOS高级技能

  • 初识HarmonOS内核
  • 实战就业级设备开发

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

《鸿蒙 (OpenHarmony)开发入门教学视频》

《鸿蒙生态应用开发V2.0白皮书》

图片

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

图片

《鸿蒙开发基础》

img img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!