diff --git a/zh-cn/application-dev/arkts-utils/multi-time-consuming-tasks.md b/zh-cn/application-dev/arkts-utils/multi-time-consuming-tasks.md index cf735f67ddad8e5247d29b44dab2b0a96f313143..0e756cf2b7f21700d5dfda04606f2458327f4ddd 100644 --- a/zh-cn/application-dev/arkts-utils/multi-time-consuming-tasks.md +++ b/zh-cn/application-dev/arkts-utils/multi-time-consuming-tasks.md @@ -50,24 +50,45 @@ 2. 将需要执行的Task放到了一个TaskGroup里面,当TaskGroup中的所有Task执行完毕后,会将所有Task的结果都放在一个数组中并返回给宿主线程,而不是每执行完一个Task就返回一次,这样宿主线程就可以在返回的数据里拿到所有Task的执行结果,便于后续使用。 ```ts - // MultiTask.ets + // Index.ets import { taskpool } from '@kit.ArkTS'; import { IconItemSource } from './IconItemSource'; import { loadPicture } from './IndependentTask'; - - let iconItemSourceList: IconItemSource[][]; - - let taskGroup: taskpool.TaskGroup = new taskpool.TaskGroup(); - taskGroup.addTask(new taskpool.Task(loadPicture, 30)); - taskGroup.addTask(new taskpool.Task(loadPicture, 20)); - taskGroup.addTask(new taskpool.Task(loadPicture, 10)); - taskpool.execute(taskGroup).then((ret: object) => { - let tmpLength = (ret as IconItemSource[][]).length - for (let i = 0; i < tmpLength; i++) { - for (let j = 0; j < ret[i].length; j++) { - iconItemSourceList.push(ret[i][j]); + + @Entry + @Component + struct Index { + @State message: string = 'Hello World'; + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + .onClick(() => { + let iconItemSourceList: IconItemSource[][] = []; + + let taskGroup: taskpool.TaskGroup = new taskpool.TaskGroup(); + taskGroup.addTask(new taskpool.Task(loadPicture, 30)); + taskGroup.addTask(new taskpool.Task(loadPicture, 20)); + taskGroup.addTask(new taskpool.Task(loadPicture, 10)); + taskpool.execute(taskGroup).then((ret: object) => { + let tmpLength = (ret as IconItemSource[][]).length; + for (let i = 0; i < tmpLength; i++) { + for (let j = 0; j < ret[i].length; j++) { + iconItemSourceList.push(ret[i][j]); + } + } + // The length of iconItemSourceList is 360 + console.info("The length of iconItemSourceList is " + iconItemSourceList.length); + }) + }) + } + .width('100%') } + .height('100%') } - }) + } ``` diff --git a/zh-cn/application-dev/arkts-utils/taskpool-introduction.md b/zh-cn/application-dev/arkts-utils/taskpool-introduction.md index 3521ff05b952d9197f55e4da6ab4615440ec30a5..e8f097ba0b6f31f658503ee6c2b545f6cf09bd50 100644 --- a/zh-cn/application-dev/arkts-utils/taskpool-introduction.md +++ b/zh-cn/application-dev/arkts-utils/taskpool-introduction.md @@ -16,7 +16,7 @@ TaskPool支持开发者在宿主线程提交任务到任务队列,系统选择 - 从API version 11开始,跨并发实例传递带方法的实例对象时,该类必须使用装饰器[@Sendable装饰器](arkts-sendable.md#sendable装饰器)标注,且仅支持在.ets文件中使用。 -- 任务函数([LongTask](../reference/apis-arkts/js-apis-taskpool.md#longtask12)除外)在TaskPool工作线程的执行耗时不能超过3分钟(不包含Promise和async/await异步调用的耗时,例如网络下载、文件读写等I/O任务的耗时)。否则,任务将被强制终止。 +- 任务函数([LongTask](../reference/apis-arkts/js-apis-taskpool.md#longtask12)除外)在TaskPool工作线程中的执行时长不能超过3分钟。否则,任务将被强制终止。需要注意的是,这里的3分钟限制仅统计TaskPool线程的​​同步运行时长​​,不包含异步操作(如Promise或async/await)的等待时长。例如,数据库的插入、删除、更新等操作,如果是异步操作,仅计入CPU实际处理时长(如SQL解析),网络传输或磁盘I/O等待时长不计入;如果是同步操作,整个操作时长(含I/O阻塞时间)均计入限制。开发者可通过[Task](../reference/apis-arkts/js-apis-taskpool.md#task)的属性ioDuration、cpuDuration获取执行当前任务的异步IO耗时和CPU耗时。 - 实现任务的函数入参需满足序列化支持的类型,详情请参见[线程间通信对象](interthread-communication-overview.md)。目前不支持使用[@State装饰器](../ui/state-management/arkts-state.md)、[@Prop装饰器](../ui/state-management/arkts-prop.md)、[@Link装饰器](../ui/state-management/arkts-link.md)等装饰器修饰的复杂类型。