1e41f4b71Sopenharmony_ci# @ohos.taskpool(启动任务池) 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ci任务池(taskpool)作用是为应用程序提供一个多线程的运行环境,降低整体资源的消耗、提高系统的整体性能,且您无需关心线程实例的生命周期。您可以使用任务池API创建后台任务(Task),并对所创建的任务进行如任务执行、任务取消的操作。理论上您可以使用任务池API创建数量不受限制的任务,但是出于内存因素不建议您这样做。此外,不建议您在任务中执行阻塞操作,特别是无限期阻塞操作,长时间的阻塞操作占据工作线程,可能会阻塞其他任务调度,影响您的应用性能。 4e41f4b71Sopenharmony_ci 5e41f4b71Sopenharmony_ci您所创建的同一优先级任务的执行顺序可以由您决定,任务真实执行的顺序与您调用任务池API提供的任务执行接口顺序一致。任务默认优先级是MEDIUM。 6e41f4b71Sopenharmony_ci 7e41f4b71Sopenharmony_ci当同一时间待执行的任务数量大于任务池工作线程数量,任务池会根据负载均衡机制进行扩容,增加工作线程数量,减少整体等待时长。同样,当执行的任务数量减少,工作线程数量大于执行任务数量,部分工作线程处于空闲状态,任务池会根据负载均衡机制进行缩容,减少工作线程数量。 8e41f4b71Sopenharmony_ci 9e41f4b71Sopenharmony_ci任务池API以数字形式返回错误码。有关各个错误码的更多信息,请参阅文档[语言基础类库错误码](errorcode-utils.md)。 10e41f4b71Sopenharmony_ci 11e41f4b71Sopenharmony_citaskpool使用过程中的相关注意点请查[TaskPool注意事项](../../arkts-utils/taskpool-introduction.md#taskpool注意事项)。 12e41f4b71Sopenharmony_ci 13e41f4b71Sopenharmony_ci> **说明:** 14e41f4b71Sopenharmony_ci> 15e41f4b71Sopenharmony_ci> 本模块首批接口从API version 9 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 16e41f4b71Sopenharmony_ci 17e41f4b71Sopenharmony_ci## 导入模块 18e41f4b71Sopenharmony_ci 19e41f4b71Sopenharmony_ci```ts 20e41f4b71Sopenharmony_ciimport { taskpool } from '@kit.ArkTS'; 21e41f4b71Sopenharmony_ci``` 22e41f4b71Sopenharmony_ci## taskpool.execute 23e41f4b71Sopenharmony_ci 24e41f4b71Sopenharmony_ciexecute(func: Function, ...args: Object[]): Promise\<Object> 25e41f4b71Sopenharmony_ci 26e41f4b71Sopenharmony_ci将待执行的函数放入taskpool内部任务队列, 函数不会立即执行,而是等待分发到工作线程执行。当前执行模式不可取消任务。 27e41f4b71Sopenharmony_ci 28e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 29e41f4b71Sopenharmony_ci 30e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 31e41f4b71Sopenharmony_ci 32e41f4b71Sopenharmony_ci**参数:** 33e41f4b71Sopenharmony_ci 34e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 35e41f4b71Sopenharmony_ci| ------ | --------- | ---- | ---------------------------------------------------------------------- | 36e41f4b71Sopenharmony_ci| func | Function | 是 | 执行的逻辑需要传入函数,必须使用[@Concurrent装饰器](../../arkts-utils/taskpool-introduction.md#concurrent装饰器)装饰,支持的函数返回值类型请查[序列化支持类型](#序列化支持类型)。 | 37e41f4b71Sopenharmony_ci| args | Object[] | 否 | 执行逻辑的函数所需要的入参,支持的参数类型请查[序列化支持类型](#序列化支持类型)。默认值为undefined。 | 38e41f4b71Sopenharmony_ci 39e41f4b71Sopenharmony_ci**返回值:** 40e41f4b71Sopenharmony_ci 41e41f4b71Sopenharmony_ci| 类型 | 说明 | 42e41f4b71Sopenharmony_ci| ----------------- | ------------------------------------ | 43e41f4b71Sopenharmony_ci| Promise\<Object> | Promise对象,返回任务函数的执行结果。 | 44e41f4b71Sopenharmony_ci 45e41f4b71Sopenharmony_ci**错误码:** 46e41f4b71Sopenharmony_ci 47e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 48e41f4b71Sopenharmony_ci 49e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 50e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | 51e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 52e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. | 53e41f4b71Sopenharmony_ci| 10200014 | The function is not marked as concurrent. | 54e41f4b71Sopenharmony_ci 55e41f4b71Sopenharmony_ci**示例:** 56e41f4b71Sopenharmony_ci 57e41f4b71Sopenharmony_ci```ts 58e41f4b71Sopenharmony_ci@Concurrent 59e41f4b71Sopenharmony_cifunction printArgs(args: number): number { 60e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 61e41f4b71Sopenharmony_ci return args; 62e41f4b71Sopenharmony_ci} 63e41f4b71Sopenharmony_ci 64e41f4b71Sopenharmony_citaskpool.execute(printArgs, 100).then((value: Object) => { // 100: test number 65e41f4b71Sopenharmony_ci console.info("taskpool result: " + value); 66e41f4b71Sopenharmony_ci}); 67e41f4b71Sopenharmony_ci``` 68e41f4b71Sopenharmony_ci 69e41f4b71Sopenharmony_ci 70e41f4b71Sopenharmony_ci## taskpool.execute<sup>13+</sup> 71e41f4b71Sopenharmony_ci 72e41f4b71Sopenharmony_ciexecute<A extends Array\<Object>, R>(func: (...args: A) => R | Promise\<R>, ...args: A): Promise\<R> 73e41f4b71Sopenharmony_ci 74e41f4b71Sopenharmony_ci校验并发函数的参数类型和返回类型后,将待执行的函数放入taskpool内部任务队列。 75e41f4b71Sopenharmony_ci 76e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 77e41f4b71Sopenharmony_ci 78e41f4b71Sopenharmony_ci**原子化服务API**:从API version 13 开始,该接口支持在原子化服务中使用。 79e41f4b71Sopenharmony_ci 80e41f4b71Sopenharmony_ci**参数:** 81e41f4b71Sopenharmony_ci 82e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 83e41f4b71Sopenharmony_ci| ------ | --------- | ---- | ---------------------------------------------------------------------- | 84e41f4b71Sopenharmony_ci| func | (...args: A) => R \| Promise\<R> | 是 | 执行的逻辑需要传入函数,必须使用[@Concurrent装饰器](../../arkts-utils/taskpool-introduction.md#concurrent装饰器)装饰,支持的函数返回值类型请查[序列化支持类型](#序列化支持类型)。 | 85e41f4b71Sopenharmony_ci| args | A | 否 | 执行逻辑的函数所需要的入参,支持的参数类型请查[序列化支持类型](#序列化支持类型)。默认值为undefined。 | 86e41f4b71Sopenharmony_ci 87e41f4b71Sopenharmony_ci**返回值:** 88e41f4b71Sopenharmony_ci 89e41f4b71Sopenharmony_ci| 类型 | 说明 | 90e41f4b71Sopenharmony_ci| ----------------- | ------------------------------------ | 91e41f4b71Sopenharmony_ci| Promise\<R> | Promise对象,返回任务函数的执行结果。 | 92e41f4b71Sopenharmony_ci 93e41f4b71Sopenharmony_ci**错误码:** 94e41f4b71Sopenharmony_ci 95e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 96e41f4b71Sopenharmony_ci 97e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 98e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | 99e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1.Incorrect parameter types; 2.Parameter verification failed. | 100e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. | 101e41f4b71Sopenharmony_ci| 10200014 | The function is not marked as concurrent. | 102e41f4b71Sopenharmony_ci 103e41f4b71Sopenharmony_ci**示例:** 104e41f4b71Sopenharmony_ci 105e41f4b71Sopenharmony_ci```ts 106e41f4b71Sopenharmony_ci@Concurrent 107e41f4b71Sopenharmony_cifunction printArgs(args: number): number { 108e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 109e41f4b71Sopenharmony_ci return args; 110e41f4b71Sopenharmony_ci} 111e41f4b71Sopenharmony_ci 112e41f4b71Sopenharmony_ci@Concurrent 113e41f4b71Sopenharmony_cifunction testWithThreeParams(a: number, b: string, c: number): string { 114e41f4b71Sopenharmony_ci return b; 115e41f4b71Sopenharmony_ci} 116e41f4b71Sopenharmony_ci 117e41f4b71Sopenharmony_ci@Concurrent 118e41f4b71Sopenharmony_cifunction testWithArray(args: [number, string]): string { 119e41f4b71Sopenharmony_ci return "success"; 120e41f4b71Sopenharmony_ci} 121e41f4b71Sopenharmony_ci 122e41f4b71Sopenharmony_citaskpool.execute<[number], number>(printArgs, 100).then((value: number) => { // 100: test number 123e41f4b71Sopenharmony_ci console.info("taskpool result: " + value); 124e41f4b71Sopenharmony_ci}); 125e41f4b71Sopenharmony_ci 126e41f4b71Sopenharmony_citaskpool.execute<[number, string, number], string>(testWithThreeParams, 100, "test", 100).then((value: string) => {}) 127e41f4b71Sopenharmony_ci 128e41f4b71Sopenharmony_citaskpool.execute<[[number, string]], string>(testWithArray, [100, "test"]).then((value: string) => {}) 129e41f4b71Sopenharmony_ci``` 130e41f4b71Sopenharmony_ci 131e41f4b71Sopenharmony_ci 132e41f4b71Sopenharmony_ci## taskpool.execute 133e41f4b71Sopenharmony_ci 134e41f4b71Sopenharmony_ciexecute(task: Task, priority?: Priority): Promise\<Object> 135e41f4b71Sopenharmony_ci 136e41f4b71Sopenharmony_ci将创建好的任务放入taskpool内部任务队列,任务不会立即执行,而是等待分发到工作线程执行。当前执行模式可以设置任务优先级和尝试调用cancel进行任务取消。该任务不可以是任务组任务和串行队列任务。若该任务非长时任务,可以多次调用执行,长时任务仅支持执行一次。 137e41f4b71Sopenharmony_ci 138e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 139e41f4b71Sopenharmony_ci 140e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 141e41f4b71Sopenharmony_ci 142e41f4b71Sopenharmony_ci**参数:** 143e41f4b71Sopenharmony_ci 144e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 145e41f4b71Sopenharmony_ci| -------- | --------------------- | ---- | ---------------------------------------- | 146e41f4b71Sopenharmony_ci| task | [Task](#task) | 是 | 需要在任务池中执行的任务。 | 147e41f4b71Sopenharmony_ci| priority | [Priority](#priority) | 否 | 等待执行的任务的优先级,该参数默认值为taskpool.Priority.MEDIUM。 | 148e41f4b71Sopenharmony_ci 149e41f4b71Sopenharmony_ci**返回值:** 150e41f4b71Sopenharmony_ci 151e41f4b71Sopenharmony_ci| 类型 | 说明 | 152e41f4b71Sopenharmony_ci| ---------------- | ---------------- | 153e41f4b71Sopenharmony_ci| Promise\<Object> | Promise对象,返回任务函数的执行结果。 | 154e41f4b71Sopenharmony_ci 155e41f4b71Sopenharmony_ci**错误码:** 156e41f4b71Sopenharmony_ci 157e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 158e41f4b71Sopenharmony_ci 159e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 160e41f4b71Sopenharmony_ci| -------- | ------------------------------------------- | 161e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 162e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. | 163e41f4b71Sopenharmony_ci| 10200014 | The function is not marked as concurrent. | 164e41f4b71Sopenharmony_ci| 10200051 | The periodic task cannot be executed again. | 165e41f4b71Sopenharmony_ci 166e41f4b71Sopenharmony_ci**示例:** 167e41f4b71Sopenharmony_ci 168e41f4b71Sopenharmony_ci```ts 169e41f4b71Sopenharmony_ci@Concurrent 170e41f4b71Sopenharmony_cifunction printArgs(args: number): number { 171e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 172e41f4b71Sopenharmony_ci return args; 173e41f4b71Sopenharmony_ci} 174e41f4b71Sopenharmony_ci 175e41f4b71Sopenharmony_cilet task1: taskpool.Task = new taskpool.Task(printArgs, 100); // 100: test number 176e41f4b71Sopenharmony_cilet task2: taskpool.Task = new taskpool.Task(printArgs, 200); // 200: test number 177e41f4b71Sopenharmony_cilet task3: taskpool.Task = new taskpool.Task(printArgs, 300); // 300: test number 178e41f4b71Sopenharmony_citaskpool.execute(task1, taskpool.Priority.LOW).then((value: Object) => { 179e41f4b71Sopenharmony_ci console.info("taskpool result1: " + value); 180e41f4b71Sopenharmony_ci}); 181e41f4b71Sopenharmony_citaskpool.execute(task2, taskpool.Priority.MEDIUM).then((value: Object) => { 182e41f4b71Sopenharmony_ci console.info("taskpool result2: " + value); 183e41f4b71Sopenharmony_ci}); 184e41f4b71Sopenharmony_citaskpool.execute(task3, taskpool.Priority.HIGH).then((value: Object) => { 185e41f4b71Sopenharmony_ci console.info("taskpool result3: " + value); 186e41f4b71Sopenharmony_ci}); 187e41f4b71Sopenharmony_ci``` 188e41f4b71Sopenharmony_ci 189e41f4b71Sopenharmony_ci 190e41f4b71Sopenharmony_ci## taskpool.execute<sup>13+</sup> 191e41f4b71Sopenharmony_ci 192e41f4b71Sopenharmony_ciexecute<A extends Array\<Object>, R>(task: GenericsTask<A, R>, priority?: Priority): Promise\<R> 193e41f4b71Sopenharmony_ci 194e41f4b71Sopenharmony_ci校验并发函数的参数类型和返回类型后,将创建好的泛型任务放入taskpool内部任务队列。 195e41f4b71Sopenharmony_ci 196e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 197e41f4b71Sopenharmony_ci 198e41f4b71Sopenharmony_ci**原子化服务API**:从API version 13 开始,该接口支持在原子化服务中使用。 199e41f4b71Sopenharmony_ci 200e41f4b71Sopenharmony_ci**参数:** 201e41f4b71Sopenharmony_ci 202e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 203e41f4b71Sopenharmony_ci| -------- | --------------------- | ---- | ---------------------------------------- | 204e41f4b71Sopenharmony_ci| task | [GenericsTask](#genericstask13) | 是 | 需要在任务池中执行的泛型任务。 | 205e41f4b71Sopenharmony_ci| priority | [Priority](#priority) | 否 | 等待执行的任务的优先级,该参数默认值为taskpool.Priority.MEDIUM。 | 206e41f4b71Sopenharmony_ci 207e41f4b71Sopenharmony_ci**返回值:** 208e41f4b71Sopenharmony_ci 209e41f4b71Sopenharmony_ci| 类型 | 说明 | 210e41f4b71Sopenharmony_ci| ---------------- | ---------------- | 211e41f4b71Sopenharmony_ci| Promise\<R> | Promise对象,返回任务函数的执行结果。 | 212e41f4b71Sopenharmony_ci 213e41f4b71Sopenharmony_ci**错误码:** 214e41f4b71Sopenharmony_ci 215e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 216e41f4b71Sopenharmony_ci 217e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 218e41f4b71Sopenharmony_ci| -------- | ------------------------------------------- | 219e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1.Incorrect parameter types; 2.Parameter verification failed. | 220e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. | 221e41f4b71Sopenharmony_ci| 10200014 | The function is not marked as concurrent. | 222e41f4b71Sopenharmony_ci| 10200051 | The periodic task cannot be executed again. | 223e41f4b71Sopenharmony_ci 224e41f4b71Sopenharmony_ci**示例:** 225e41f4b71Sopenharmony_ci 226e41f4b71Sopenharmony_ci```ts 227e41f4b71Sopenharmony_ci@Concurrent 228e41f4b71Sopenharmony_cifunction printArgs(args: number): number { 229e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 230e41f4b71Sopenharmony_ci return args; 231e41f4b71Sopenharmony_ci} 232e41f4b71Sopenharmony_ci 233e41f4b71Sopenharmony_cilet task1: taskpool.Task = new taskpool.GenericsTask<[number], number>(printArgs, 100); // 100: test number 234e41f4b71Sopenharmony_cilet task2: taskpool.Task = new taskpool.GenericsTask<[number], number>(printArgs, 200); // 200: test number 235e41f4b71Sopenharmony_cilet task3: taskpool.Task = new taskpool.GenericsTask<[number], number>(printArgs, 300); // 300: test number 236e41f4b71Sopenharmony_citaskpool.execute<[number], number>(task1, taskpool.Priority.LOW).then((value: number) => { 237e41f4b71Sopenharmony_ci console.info("taskpool result1: " + value); 238e41f4b71Sopenharmony_ci}); 239e41f4b71Sopenharmony_citaskpool.execute<[number], number>(task2, taskpool.Priority.MEDIUM).then((value: number) => { 240e41f4b71Sopenharmony_ci console.info("taskpool result2: " + value); 241e41f4b71Sopenharmony_ci}); 242e41f4b71Sopenharmony_citaskpool.execute<[number], number>(task3, taskpool.Priority.HIGH).then((value: number) => { 243e41f4b71Sopenharmony_ci console.info("taskpool result3: " + value); 244e41f4b71Sopenharmony_ci}); 245e41f4b71Sopenharmony_ci``` 246e41f4b71Sopenharmony_ci 247e41f4b71Sopenharmony_ci 248e41f4b71Sopenharmony_ci## taskpool.execute<sup>10+</sup> 249e41f4b71Sopenharmony_ci 250e41f4b71Sopenharmony_ciexecute(group: TaskGroup, priority?: Priority): Promise<Object[]> 251e41f4b71Sopenharmony_ci 252e41f4b71Sopenharmony_ci将创建好的任务组放入taskpool内部任务队列,任务组中的任务不会立即执行,而是等待分发到工作线程执行。任务组中任务全部执行完成后,结果数组统一返回。当前执行模式适用于执行一组有关联的任务。 253e41f4b71Sopenharmony_ci 254e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 255e41f4b71Sopenharmony_ci 256e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 257e41f4b71Sopenharmony_ci 258e41f4b71Sopenharmony_ci**参数:** 259e41f4b71Sopenharmony_ci 260e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 261e41f4b71Sopenharmony_ci| --------- | --------------------------- | ---- | -------------------------------------------------------------- | 262e41f4b71Sopenharmony_ci| group | [TaskGroup](#taskgroup10) | 是 | 需要在任务池中执行的任务组。 | 263e41f4b71Sopenharmony_ci| priority | [Priority](#priority) | 否 | 等待执行的任务组的优先级,该参数默认值为taskpool.Priority.MEDIUM。 | 264e41f4b71Sopenharmony_ci 265e41f4b71Sopenharmony_ci**返回值:** 266e41f4b71Sopenharmony_ci 267e41f4b71Sopenharmony_ci| 类型 | 说明 | 268e41f4b71Sopenharmony_ci| ---------------- | ---------------------------------- | 269e41f4b71Sopenharmony_ci| Promise\<Object[]> | Promise对象数组,返回任务函数的执行结果。 | 270e41f4b71Sopenharmony_ci 271e41f4b71Sopenharmony_ci**错误码:** 272e41f4b71Sopenharmony_ci 273e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 274e41f4b71Sopenharmony_ci 275e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 276e41f4b71Sopenharmony_ci| -------- | ------------------------------------------- | 277e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 278e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. | 279e41f4b71Sopenharmony_ci 280e41f4b71Sopenharmony_ci**示例:** 281e41f4b71Sopenharmony_ci 282e41f4b71Sopenharmony_ci```ts 283e41f4b71Sopenharmony_ci@Concurrent 284e41f4b71Sopenharmony_cifunction printArgs(args: number): number { 285e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 286e41f4b71Sopenharmony_ci return args; 287e41f4b71Sopenharmony_ci} 288e41f4b71Sopenharmony_ci 289e41f4b71Sopenharmony_cilet taskGroup1: taskpool.TaskGroup = new taskpool.TaskGroup(); 290e41f4b71Sopenharmony_citaskGroup1.addTask(printArgs, 10); // 10: test number 291e41f4b71Sopenharmony_citaskGroup1.addTask(printArgs, 20); // 20: test number 292e41f4b71Sopenharmony_citaskGroup1.addTask(printArgs, 30); // 30: test number 293e41f4b71Sopenharmony_ci 294e41f4b71Sopenharmony_cilet taskGroup2: taskpool.TaskGroup = new taskpool.TaskGroup(); 295e41f4b71Sopenharmony_cilet task1: taskpool.Task = new taskpool.Task(printArgs, 100); // 100: test number 296e41f4b71Sopenharmony_cilet task2: taskpool.Task = new taskpool.Task(printArgs, 200); // 200: test number 297e41f4b71Sopenharmony_cilet task3: taskpool.Task = new taskpool.Task(printArgs, 300); // 300: test number 298e41f4b71Sopenharmony_citaskGroup2.addTask(task1); 299e41f4b71Sopenharmony_citaskGroup2.addTask(task2); 300e41f4b71Sopenharmony_citaskGroup2.addTask(task3); 301e41f4b71Sopenharmony_citaskpool.execute(taskGroup1).then((res: Array<Object>) => { 302e41f4b71Sopenharmony_ci console.info("taskpool execute res is:" + res); 303e41f4b71Sopenharmony_ci}); 304e41f4b71Sopenharmony_citaskpool.execute(taskGroup2).then((res: Array<Object>) => { 305e41f4b71Sopenharmony_ci console.info("taskpool execute res is:" + res); 306e41f4b71Sopenharmony_ci}); 307e41f4b71Sopenharmony_ci``` 308e41f4b71Sopenharmony_ci 309e41f4b71Sopenharmony_ci## taskpool.executeDelayed<sup>11+</sup> 310e41f4b71Sopenharmony_ci 311e41f4b71Sopenharmony_ciexecuteDelayed(delayTime: number, task: Task, priority?: Priority): Promise\<Object> 312e41f4b71Sopenharmony_ci 313e41f4b71Sopenharmony_ci延时执行任务。当前执行模式可以设置任务优先级和尝试调用cancel进行任务取消。该任务不可以是任务组任务、串行队列任务和周期任务。若该任务非长时任务,可以多次调用executeDelayed执行,长时任务仅支持执行一次。 314e41f4b71Sopenharmony_ci 315e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 316e41f4b71Sopenharmony_ci 317e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 318e41f4b71Sopenharmony_ci 319e41f4b71Sopenharmony_ci**参数:** 320e41f4b71Sopenharmony_ci 321e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 322e41f4b71Sopenharmony_ci| ----------- | ------------- | ---- | -------------------- | 323e41f4b71Sopenharmony_ci| delayTime | number | 是 | 延时时间。单位为ms。 | 324e41f4b71Sopenharmony_ci| task | [Task](#task) | 是 | 需要延时执行的任务。 | 325e41f4b71Sopenharmony_ci| priority | [Priority](#priority) | 否 | 延时执行的任务的优先级,该参数默认值为taskpool.Priority.MEDIUM。 | 326e41f4b71Sopenharmony_ci 327e41f4b71Sopenharmony_ci**返回值:** 328e41f4b71Sopenharmony_ci 329e41f4b71Sopenharmony_ci| 类型 | 说明 | 330e41f4b71Sopenharmony_ci| ---------------- | ---------------------------------- | 331e41f4b71Sopenharmony_ci| Promise\<Object> | Promise对象,返回任务函数的执行结果。 | 332e41f4b71Sopenharmony_ci 333e41f4b71Sopenharmony_ci**错误码:** 334e41f4b71Sopenharmony_ci 335e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 336e41f4b71Sopenharmony_ci 337e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 338e41f4b71Sopenharmony_ci| --------- | -------------------------------- | 339e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 340e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. | 341e41f4b71Sopenharmony_ci| 10200014 | The function is not marked as concurrent. | 342e41f4b71Sopenharmony_ci| 10200028 | The delayTime is less than zero. | 343e41f4b71Sopenharmony_ci| 10200051 | The periodic task cannot be executed again. | 344e41f4b71Sopenharmony_ci 345e41f4b71Sopenharmony_ci**示例:** 346e41f4b71Sopenharmony_ci 347e41f4b71Sopenharmony_ci```ts 348e41f4b71Sopenharmony_ci// import BusinessError 349e41f4b71Sopenharmony_ciimport { BusinessError } from '@kit.BasicServicesKit' 350e41f4b71Sopenharmony_ci 351e41f4b71Sopenharmony_ci@Concurrent 352e41f4b71Sopenharmony_cifunction printArgs(args: number): void { 353e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 354e41f4b71Sopenharmony_ci} 355e41f4b71Sopenharmony_ci 356e41f4b71Sopenharmony_cilet t: number = Date.now(); 357e41f4b71Sopenharmony_ciconsole.info("taskpool start time is: " + t); 358e41f4b71Sopenharmony_cilet task: taskpool.Task = new taskpool.Task(printArgs, 100); // 100: test number 359e41f4b71Sopenharmony_citaskpool.executeDelayed(1000, task).then(() => { // 1000:delayTime is 1000ms 360e41f4b71Sopenharmony_ci console.info("taskpool execute success"); 361e41f4b71Sopenharmony_ci}).catch((e: BusinessError) => { 362e41f4b71Sopenharmony_ci console.error(`taskpool execute: Code: ${e.code}, message: ${e.message}`); 363e41f4b71Sopenharmony_ci}) 364e41f4b71Sopenharmony_ci``` 365e41f4b71Sopenharmony_ci 366e41f4b71Sopenharmony_ci 367e41f4b71Sopenharmony_ci## taskpool.executeDelayed<sup>13+</sup> 368e41f4b71Sopenharmony_ci 369e41f4b71Sopenharmony_ciexecuteDelayed<A extends Array\<Object>, R>(delayTime: number, task: GenericsTask\<A, R>, priority?: Priority): Promise\<R> 370e41f4b71Sopenharmony_ci 371e41f4b71Sopenharmony_ci校验并发函数的参数类型和返回类型后,延时执行泛型任务。 372e41f4b71Sopenharmony_ci 373e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 374e41f4b71Sopenharmony_ci 375e41f4b71Sopenharmony_ci**原子化服务API**:从API version 13 开始,该接口支持在原子化服务中使用。 376e41f4b71Sopenharmony_ci 377e41f4b71Sopenharmony_ci**参数:** 378e41f4b71Sopenharmony_ci 379e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 380e41f4b71Sopenharmony_ci| ----------- | ------------- | ---- | -------------------- | 381e41f4b71Sopenharmony_ci| delayTime | number | 是 | 延时时间。单位为ms。 | 382e41f4b71Sopenharmony_ci| task | [GenericsTask](#genericstask13) | 是 | 需要延时执行的泛型任务。 | 383e41f4b71Sopenharmony_ci| priority | [Priority](#priority) | 否 | 延时执行的任务的优先级,该参数默认值为taskpool.Priority.MEDIUM。 | 384e41f4b71Sopenharmony_ci 385e41f4b71Sopenharmony_ci**返回值:** 386e41f4b71Sopenharmony_ci 387e41f4b71Sopenharmony_ci| 类型 | 说明 | 388e41f4b71Sopenharmony_ci| ---------------- | ---------------------------------- | 389e41f4b71Sopenharmony_ci| Promise\<R> | Promise对象,返回任务函数的执行结果。 | 390e41f4b71Sopenharmony_ci 391e41f4b71Sopenharmony_ci**错误码:** 392e41f4b71Sopenharmony_ci 393e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 394e41f4b71Sopenharmony_ci 395e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 396e41f4b71Sopenharmony_ci| --------- | -------------------------------- | 397e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1.Incorrect parameter types; 2.Parameter verification failed. | 398e41f4b71Sopenharmony_ci| 10200028 | The delayTime is less than zero. | 399e41f4b71Sopenharmony_ci| 10200051 | The periodic task cannot be executed again. | 400e41f4b71Sopenharmony_ci 401e41f4b71Sopenharmony_ci**示例:** 402e41f4b71Sopenharmony_ci 403e41f4b71Sopenharmony_ci```ts 404e41f4b71Sopenharmony_ci// import BusinessError 405e41f4b71Sopenharmony_ciimport { BusinessError } from '@kit.BasicServicesKit' 406e41f4b71Sopenharmony_ci 407e41f4b71Sopenharmony_ci@Concurrent 408e41f4b71Sopenharmony_cifunction printArgs(args: number): string { 409e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 410e41f4b71Sopenharmony_ci return "success"; 411e41f4b71Sopenharmony_ci} 412e41f4b71Sopenharmony_ci 413e41f4b71Sopenharmony_cilet task: taskpool.Task = new taskpool.GenericsTask<[number], string>(printArgs, 100); // 100: test number 414e41f4b71Sopenharmony_citaskpool.executeDelayed<[number], string>(1000, task).then((res: string) => { // 1000:delayTime is 1000ms 415e41f4b71Sopenharmony_ci console.info("taskpool execute success"); 416e41f4b71Sopenharmony_ci}).catch((e: BusinessError) => { 417e41f4b71Sopenharmony_ci console.error(`taskpool execute: Code: ${e.code}, message: ${e.message}`); 418e41f4b71Sopenharmony_ci}) 419e41f4b71Sopenharmony_ci``` 420e41f4b71Sopenharmony_ci 421e41f4b71Sopenharmony_ci 422e41f4b71Sopenharmony_ci## taskpool.executePeriodically<sup>12+</sup> 423e41f4b71Sopenharmony_ci 424e41f4b71Sopenharmony_ciexecutePeriodically(period: number, task: Task, priority?: Priority): void 425e41f4b71Sopenharmony_ci 426e41f4b71Sopenharmony_ci周期执行任务,每隔period时长执行一次任务。当前执行模式支持设置任务优先级和调用cancel取消任务周期执行。周期任务不可以是任务组任务和串行队列任务,不可以再次调用执行接口,不可以拥有依赖关系。 427e41f4b71Sopenharmony_ci 428e41f4b71Sopenharmony_ci 429e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 430e41f4b71Sopenharmony_ci 431e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 432e41f4b71Sopenharmony_ci 433e41f4b71Sopenharmony_ci**参数:** 434e41f4b71Sopenharmony_ci 435e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 436e41f4b71Sopenharmony_ci| ----------- | ------------- | ----- | -------------------- | 437e41f4b71Sopenharmony_ci| period | number | 是 | 周期时长。单位为ms。 | 438e41f4b71Sopenharmony_ci| task | [Task](#task) | 是 | 需要周期执行的任务。 | 439e41f4b71Sopenharmony_ci| priority | [Priority](#priority) | 否 | 周期执行的任务的优先级,该参数默认值为taskpool.Priority.MEDIUM。 | 440e41f4b71Sopenharmony_ci 441e41f4b71Sopenharmony_ci 442e41f4b71Sopenharmony_ci**错误码:** 443e41f4b71Sopenharmony_ci 444e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 445e41f4b71Sopenharmony_ci 446e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 447e41f4b71Sopenharmony_ci| ---------- | -------------------------------- | 448e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 449e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. | 450e41f4b71Sopenharmony_ci| 10200014 | The function is not marked as concurrent. | 451e41f4b71Sopenharmony_ci| 10200028 | The period is less than zero. | 452e41f4b71Sopenharmony_ci| 10200050 | The concurrent task has been executed and cannot be executed periodically. | 453e41f4b71Sopenharmony_ci 454e41f4b71Sopenharmony_ci 455e41f4b71Sopenharmony_ci**示例:** 456e41f4b71Sopenharmony_ci 457e41f4b71Sopenharmony_ci```ts 458e41f4b71Sopenharmony_ci@Concurrent 459e41f4b71Sopenharmony_cifunction printArgs(args: number): void { 460e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 461e41f4b71Sopenharmony_ci} 462e41f4b71Sopenharmony_ci 463e41f4b71Sopenharmony_ci@Concurrent 464e41f4b71Sopenharmony_cifunction testExecutePeriodically(args: number): void { 465e41f4b71Sopenharmony_ci let t = Date.now(); 466e41f4b71Sopenharmony_ci while ((Date.now() - t) < args) { 467e41f4b71Sopenharmony_ci continue; 468e41f4b71Sopenharmony_ci } 469e41f4b71Sopenharmony_ci taskpool.Task.sendData(args); // 向主线程发送消息 470e41f4b71Sopenharmony_ci} 471e41f4b71Sopenharmony_ci 472e41f4b71Sopenharmony_cifunction printResult(data: number): void { 473e41f4b71Sopenharmony_ci console.info("taskpool: data is: " + data); 474e41f4b71Sopenharmony_ci} 475e41f4b71Sopenharmony_ci 476e41f4b71Sopenharmony_cifunction taskpoolTest() { 477e41f4b71Sopenharmony_ci try { 478e41f4b71Sopenharmony_ci let task: taskpool.Task = new taskpool.Task(printArgs, 100); // 100: test number 479e41f4b71Sopenharmony_ci taskpool.executePeriodically(1000, task); // 1000: period is 1000ms 480e41f4b71Sopenharmony_ci } catch (e) { 481e41f4b71Sopenharmony_ci console.error(`taskpool execute-1: Code: ${e.code}, message: ${e.message}`); 482e41f4b71Sopenharmony_ci } 483e41f4b71Sopenharmony_ci 484e41f4b71Sopenharmony_ci try { 485e41f4b71Sopenharmony_ci let periodicTask: taskpool.Task = new taskpool.Task(testExecutePeriodically, 200); // 200: test number 486e41f4b71Sopenharmony_ci periodicTask.onReceiveData(printResult); 487e41f4b71Sopenharmony_ci taskpool.executePeriodically(1000, periodicTask); // 1000: period is 1000ms 488e41f4b71Sopenharmony_ci } catch (e) { 489e41f4b71Sopenharmony_ci console.error(`taskpool execute-2: Code: ${e.code}, message: ${e.message}`); 490e41f4b71Sopenharmony_ci } 491e41f4b71Sopenharmony_ci} 492e41f4b71Sopenharmony_ci 493e41f4b71Sopenharmony_citaskpoolTest(); 494e41f4b71Sopenharmony_ci``` 495e41f4b71Sopenharmony_ci 496e41f4b71Sopenharmony_ci 497e41f4b71Sopenharmony_ci## taskpool.executePeriodically<sup>13+</sup> 498e41f4b71Sopenharmony_ci 499e41f4b71Sopenharmony_ciexecutePeriodically<A extends Array\<Object>, R>(period: number, task: GenericsTask\<A, R>, priority?: Priority): void 500e41f4b71Sopenharmony_ci 501e41f4b71Sopenharmony_ci校验并发函数的参数类型和返回类型后,周期执行泛型任务,每隔period时长执行一次泛型任务。 502e41f4b71Sopenharmony_ci 503e41f4b71Sopenharmony_ci 504e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 505e41f4b71Sopenharmony_ci 506e41f4b71Sopenharmony_ci**原子化服务API**:从API version 13 开始,该接口支持在原子化服务中使用。 507e41f4b71Sopenharmony_ci 508e41f4b71Sopenharmony_ci**参数:** 509e41f4b71Sopenharmony_ci 510e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 511e41f4b71Sopenharmony_ci| ----------- | ------------- | ----- | -------------------- | 512e41f4b71Sopenharmony_ci| period | number | 是 | 周期时长。单位为ms。 | 513e41f4b71Sopenharmony_ci| task | [GenericsTask](#genericstask13) | 是 | 需要周期执行的泛型任务。 | 514e41f4b71Sopenharmony_ci| priority | [Priority](#priority) | 否 | 周期执行的任务的优先级,该参数默认值为taskpool.Priority.MEDIUM。 | 515e41f4b71Sopenharmony_ci 516e41f4b71Sopenharmony_ci 517e41f4b71Sopenharmony_ci**错误码:** 518e41f4b71Sopenharmony_ci 519e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 520e41f4b71Sopenharmony_ci 521e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 522e41f4b71Sopenharmony_ci| ---------- | -------------------------------- | 523e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1.Incorrect parameter types; 2.Parameter verification failed. | 524e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. | 525e41f4b71Sopenharmony_ci| 10200014 | The function is not marked as concurrent. | 526e41f4b71Sopenharmony_ci| 10200028 | The period is less than zero. | 527e41f4b71Sopenharmony_ci| 10200050 | The concurrent task has been executed and cannot be executed periodically. | 528e41f4b71Sopenharmony_ci 529e41f4b71Sopenharmony_ci 530e41f4b71Sopenharmony_ci**示例:** 531e41f4b71Sopenharmony_ci 532e41f4b71Sopenharmony_ci```ts 533e41f4b71Sopenharmony_ci@Concurrent 534e41f4b71Sopenharmony_cifunction printArgs(args: number): void { 535e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 536e41f4b71Sopenharmony_ci} 537e41f4b71Sopenharmony_ci 538e41f4b71Sopenharmony_ci@Concurrent 539e41f4b71Sopenharmony_cifunction testExecutePeriodically(args: number): void { 540e41f4b71Sopenharmony_ci let t = Date.now(); 541e41f4b71Sopenharmony_ci while ((Date.now() - t) < args) { 542e41f4b71Sopenharmony_ci continue; 543e41f4b71Sopenharmony_ci } 544e41f4b71Sopenharmony_ci taskpool.Task.sendData(args); // 向主线程发送消息 545e41f4b71Sopenharmony_ci} 546e41f4b71Sopenharmony_ci 547e41f4b71Sopenharmony_cifunction printResult(data: number): void { 548e41f4b71Sopenharmony_ci console.info("taskpool: data is: " + data); 549e41f4b71Sopenharmony_ci} 550e41f4b71Sopenharmony_ci 551e41f4b71Sopenharmony_cifunction taskpoolTest() { 552e41f4b71Sopenharmony_ci try { 553e41f4b71Sopenharmony_ci let task: taskpool.Task = new taskpool.GenericsTask<[number], void>(printArgs, 100); // 100: test number 554e41f4b71Sopenharmony_ci taskpool.executePeriodically<[number], void>(1000, task); // 1000: period is 1000ms 555e41f4b71Sopenharmony_ci } catch (e) { 556e41f4b71Sopenharmony_ci console.error(`taskpool execute-1: Code: ${e.code}, message: ${e.message}`); 557e41f4b71Sopenharmony_ci } 558e41f4b71Sopenharmony_ci 559e41f4b71Sopenharmony_ci try { 560e41f4b71Sopenharmony_ci let periodicTask: taskpool.Task = new taskpool.GenericsTask<[number], void>(testExecutePeriodically, 200); // 200: test number 561e41f4b71Sopenharmony_ci periodicTask.onReceiveData(printResult); 562e41f4b71Sopenharmony_ci taskpool.executePeriodically<[number], void>(1000, periodicTask); // 1000: period is 1000ms 563e41f4b71Sopenharmony_ci } catch (e) { 564e41f4b71Sopenharmony_ci console.error(`taskpool execute-2: Code: ${e.code}, message: ${e.message}`); 565e41f4b71Sopenharmony_ci } 566e41f4b71Sopenharmony_ci} 567e41f4b71Sopenharmony_ci 568e41f4b71Sopenharmony_citaskpoolTest(); 569e41f4b71Sopenharmony_ci``` 570e41f4b71Sopenharmony_ci 571e41f4b71Sopenharmony_ci 572e41f4b71Sopenharmony_ci## taskpool.cancel 573e41f4b71Sopenharmony_ci 574e41f4b71Sopenharmony_cicancel(task: Task): void 575e41f4b71Sopenharmony_ci 576e41f4b71Sopenharmony_ci取消任务池中的任务。当任务在taskpool等待队列中,取消该任务后该任务将不再执行,并返回undefined作为结果;当任务已经在taskpool工作线程执行,取消该任务并不影响任务继续执行,执行结果在catch分支返回,搭配isCanceled使用可以对任务取消行为作出响应。taskpool.cancel对其之前的taskpool.execute/taskpool.executeDelayed生效。 577e41f4b71Sopenharmony_ci 578e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 579e41f4b71Sopenharmony_ci 580e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 581e41f4b71Sopenharmony_ci 582e41f4b71Sopenharmony_ci**参数:** 583e41f4b71Sopenharmony_ci 584e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 585e41f4b71Sopenharmony_ci| ------ | ------------- | ---- | -------------------- | 586e41f4b71Sopenharmony_ci| task | [Task](#task) | 是 | 需要取消执行的任务。 | 587e41f4b71Sopenharmony_ci 588e41f4b71Sopenharmony_ci**错误码:** 589e41f4b71Sopenharmony_ci 590e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 591e41f4b71Sopenharmony_ci 592e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 593e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | 594e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 595e41f4b71Sopenharmony_ci| 10200015 | The task to cancel does not exist. | 596e41f4b71Sopenharmony_ci 597e41f4b71Sopenharmony_ci从API version10开始,此接口调用时不再涉及上报错误码10200016。 598e41f4b71Sopenharmony_ci 599e41f4b71Sopenharmony_ci**正在执行的任务取消示例:** 600e41f4b71Sopenharmony_ci 601e41f4b71Sopenharmony_ci```ts 602e41f4b71Sopenharmony_ci@Concurrent 603e41f4b71Sopenharmony_cifunction inspectStatus(arg: number): number { 604e41f4b71Sopenharmony_ci // 第一次检查任务是否已经取消并作出响应 605e41f4b71Sopenharmony_ci if (taskpool.Task.isCanceled()) { 606e41f4b71Sopenharmony_ci console.info("task has been canceled before 2s sleep."); 607e41f4b71Sopenharmony_ci return arg + 2; 608e41f4b71Sopenharmony_ci } 609e41f4b71Sopenharmony_ci // 2s sleep 610e41f4b71Sopenharmony_ci let t: number = Date.now(); 611e41f4b71Sopenharmony_ci while (Date.now() - t < 2000) { 612e41f4b71Sopenharmony_ci continue; 613e41f4b71Sopenharmony_ci } 614e41f4b71Sopenharmony_ci // 第二次检查任务是否已经取消并作出响应 615e41f4b71Sopenharmony_ci if (taskpool.Task.isCanceled()) { 616e41f4b71Sopenharmony_ci console.info("task has been canceled after 2s sleep."); 617e41f4b71Sopenharmony_ci return arg + 3; 618e41f4b71Sopenharmony_ci } 619e41f4b71Sopenharmony_ci return arg + 1; 620e41f4b71Sopenharmony_ci} 621e41f4b71Sopenharmony_ci 622e41f4b71Sopenharmony_cifunction concurrentFunc() { 623e41f4b71Sopenharmony_ci let task1: taskpool.Task = new taskpool.Task(inspectStatus, 100); // 100: test number 624e41f4b71Sopenharmony_ci let task2: taskpool.Task = new taskpool.Task(inspectStatus, 200); // 200: test number 625e41f4b71Sopenharmony_ci let task3: taskpool.Task = new taskpool.Task(inspectStatus, 300); // 300: test number 626e41f4b71Sopenharmony_ci let task4: taskpool.Task = new taskpool.Task(inspectStatus, 400); // 400: test number 627e41f4b71Sopenharmony_ci let task5: taskpool.Task = new taskpool.Task(inspectStatus, 500); // 500: test number 628e41f4b71Sopenharmony_ci let task6: taskpool.Task = new taskpool.Task(inspectStatus, 600); // 600: test number 629e41f4b71Sopenharmony_ci taskpool.execute(task1).then((res: Object)=>{ 630e41f4b71Sopenharmony_ci console.info("taskpool test result: " + res); 631e41f4b71Sopenharmony_ci }); 632e41f4b71Sopenharmony_ci taskpool.execute(task2); 633e41f4b71Sopenharmony_ci taskpool.execute(task3); 634e41f4b71Sopenharmony_ci taskpool.execute(task4); 635e41f4b71Sopenharmony_ci taskpool.execute(task5); 636e41f4b71Sopenharmony_ci taskpool.execute(task6); 637e41f4b71Sopenharmony_ci // 1s后取消task 638e41f4b71Sopenharmony_ci setTimeout(()=>{ 639e41f4b71Sopenharmony_ci try { 640e41f4b71Sopenharmony_ci taskpool.cancel(task1); 641e41f4b71Sopenharmony_ci } catch (e) { 642e41f4b71Sopenharmony_ci console.error(`taskpool: cancel error code: ${e.code}, info: ${e.message}`); 643e41f4b71Sopenharmony_ci } 644e41f4b71Sopenharmony_ci }, 1000); 645e41f4b71Sopenharmony_ci} 646e41f4b71Sopenharmony_ci 647e41f4b71Sopenharmony_ciconcurrentFunc(); 648e41f4b71Sopenharmony_ci``` 649e41f4b71Sopenharmony_ci 650e41f4b71Sopenharmony_ci## taskpool.cancel<sup>10+</sup> 651e41f4b71Sopenharmony_ci 652e41f4b71Sopenharmony_cicancel(group: TaskGroup): void 653e41f4b71Sopenharmony_ci 654e41f4b71Sopenharmony_ci取消任务池中的任务组。当一个任务组的任务未全部执行结束时取消任务组,返回undefined作为任务组结果。 655e41f4b71Sopenharmony_ci 656e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 657e41f4b71Sopenharmony_ci 658e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 659e41f4b71Sopenharmony_ci 660e41f4b71Sopenharmony_ci**参数:** 661e41f4b71Sopenharmony_ci 662e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 663e41f4b71Sopenharmony_ci| ------- | ----------------------- | ---- | -------------------- | 664e41f4b71Sopenharmony_ci| group | [TaskGroup](#taskgroup10) | 是 | 需要取消执行的任务组。 | 665e41f4b71Sopenharmony_ci 666e41f4b71Sopenharmony_ci**错误码:** 667e41f4b71Sopenharmony_ci 668e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 669e41f4b71Sopenharmony_ci 670e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 671e41f4b71Sopenharmony_ci| -------- | ------------------------------------------------------- | 672e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 673e41f4b71Sopenharmony_ci| 10200018 | The task group to cancel does not exist. | 674e41f4b71Sopenharmony_ci 675e41f4b71Sopenharmony_ci**示例:** 676e41f4b71Sopenharmony_ci 677e41f4b71Sopenharmony_ci```ts 678e41f4b71Sopenharmony_ci@Concurrent 679e41f4b71Sopenharmony_cifunction printArgs(args: number): number { 680e41f4b71Sopenharmony_ci let t: number = Date.now(); 681e41f4b71Sopenharmony_ci while (Date.now() - t < 2000) { 682e41f4b71Sopenharmony_ci continue; 683e41f4b71Sopenharmony_ci } 684e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 685e41f4b71Sopenharmony_ci return args; 686e41f4b71Sopenharmony_ci} 687e41f4b71Sopenharmony_ci 688e41f4b71Sopenharmony_cifunction concurrentFunc() { 689e41f4b71Sopenharmony_ci let taskGroup1: taskpool.TaskGroup = new taskpool.TaskGroup(); 690e41f4b71Sopenharmony_ci taskGroup1.addTask(printArgs, 10); // 10: test number 691e41f4b71Sopenharmony_ci let taskGroup2: taskpool.TaskGroup = new taskpool.TaskGroup(); 692e41f4b71Sopenharmony_ci taskGroup2.addTask(printArgs, 100); // 100: test number 693e41f4b71Sopenharmony_ci taskpool.execute(taskGroup1).then((res: Array<Object>)=>{ 694e41f4b71Sopenharmony_ci console.info("taskGroup1 res is:" + res); 695e41f4b71Sopenharmony_ci }); 696e41f4b71Sopenharmony_ci taskpool.execute(taskGroup2).then((res: Array<Object>)=>{ 697e41f4b71Sopenharmony_ci console.info("taskGroup2 res is:" + res); 698e41f4b71Sopenharmony_ci }); 699e41f4b71Sopenharmony_ci setTimeout(()=>{ 700e41f4b71Sopenharmony_ci try { 701e41f4b71Sopenharmony_ci taskpool.cancel(taskGroup2); 702e41f4b71Sopenharmony_ci } catch (e) { 703e41f4b71Sopenharmony_ci console.error(`taskpool: cancel error code: ${e.code}, info: ${e.message}`); 704e41f4b71Sopenharmony_ci } 705e41f4b71Sopenharmony_ci }, 1000); 706e41f4b71Sopenharmony_ci} 707e41f4b71Sopenharmony_ci 708e41f4b71Sopenharmony_ciconcurrentFunc(); 709e41f4b71Sopenharmony_ci``` 710e41f4b71Sopenharmony_ci 711e41f4b71Sopenharmony_ci## taskpool.terminateTask<sup>12+</sup> 712e41f4b71Sopenharmony_ci 713e41f4b71Sopenharmony_citerminateTask(longTask: LongTask): void 714e41f4b71Sopenharmony_ci 715e41f4b71Sopenharmony_ci中止任务池中的长时任务,在长时任务执行完成后调用。中止后,执行长时任务的线程可能会被回收。 716e41f4b71Sopenharmony_ci 717e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 718e41f4b71Sopenharmony_ci 719e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 720e41f4b71Sopenharmony_ci 721e41f4b71Sopenharmony_ci**参数:** 722e41f4b71Sopenharmony_ci 723e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 724e41f4b71Sopenharmony_ci| ------ | ------------- | ---- | -------------------- | 725e41f4b71Sopenharmony_ci| longTask | [LongTask](#longtask12) | 是 | 需要中止的长时任务。 | 726e41f4b71Sopenharmony_ci 727e41f4b71Sopenharmony_ci**错误码:** 728e41f4b71Sopenharmony_ci 729e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 730e41f4b71Sopenharmony_ci 731e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 732e41f4b71Sopenharmony_ci| -------- | -------- | 733e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 734e41f4b71Sopenharmony_ci 735e41f4b71Sopenharmony_ci**示例:** 736e41f4b71Sopenharmony_ci 737e41f4b71Sopenharmony_ci```ts 738e41f4b71Sopenharmony_ci@Concurrent 739e41f4b71Sopenharmony_cifunction longTask(arg: number): number { 740e41f4b71Sopenharmony_ci let t: number = Date.now(); 741e41f4b71Sopenharmony_ci while (Date.now() - t < arg) { 742e41f4b71Sopenharmony_ci continue; 743e41f4b71Sopenharmony_ci } 744e41f4b71Sopenharmony_ci console.info("longTask has been executed."); 745e41f4b71Sopenharmony_ci return arg; 746e41f4b71Sopenharmony_ci} 747e41f4b71Sopenharmony_ci 748e41f4b71Sopenharmony_cifunction concurrentFunc() { 749e41f4b71Sopenharmony_ci let task1: taskpool.LongTask = new taskpool.LongTask(longTask, 1000); // 1000: sleep time 750e41f4b71Sopenharmony_ci taskpool.execute(task1).then((res: Object)=>{ 751e41f4b71Sopenharmony_ci taskpool.terminateTask(task1); 752e41f4b71Sopenharmony_ci console.info("taskpool longTask result: " + res); 753e41f4b71Sopenharmony_ci }); 754e41f4b71Sopenharmony_ci} 755e41f4b71Sopenharmony_ci 756e41f4b71Sopenharmony_ciconcurrentFunc(); 757e41f4b71Sopenharmony_ci``` 758e41f4b71Sopenharmony_ci 759e41f4b71Sopenharmony_ci## taskpool.isConcurrent<sup>12+</sup> 760e41f4b71Sopenharmony_ci 761e41f4b71Sopenharmony_ciisConcurrent(func: Function): boolean 762e41f4b71Sopenharmony_ci 763e41f4b71Sopenharmony_ci检查函数是否为并发函数。 764e41f4b71Sopenharmony_ci 765e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 766e41f4b71Sopenharmony_ci 767e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 768e41f4b71Sopenharmony_ci 769e41f4b71Sopenharmony_ci**参数:** 770e41f4b71Sopenharmony_ci 771e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 772e41f4b71Sopenharmony_ci| ------ | ------------- | ---- | -------------------- | 773e41f4b71Sopenharmony_ci| func | Function | 是 | 需要检查的函数。 | 774e41f4b71Sopenharmony_ci 775e41f4b71Sopenharmony_ci**返回值:** 776e41f4b71Sopenharmony_ci 777e41f4b71Sopenharmony_ci| 类型 | 说明 | 778e41f4b71Sopenharmony_ci| ------- | ------------------------------------ | 779e41f4b71Sopenharmony_ci| boolean | 如果被检查函数标注了[@Concurrent装饰器](../../arkts-utils/taskpool-introduction.md#concurrent装饰器),返回true,否则返回false。 | 780e41f4b71Sopenharmony_ci 781e41f4b71Sopenharmony_ci**错误码:** 782e41f4b71Sopenharmony_ci 783e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 784e41f4b71Sopenharmony_ci 785e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 786e41f4b71Sopenharmony_ci| -------- | -------- | 787e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 788e41f4b71Sopenharmony_ci 789e41f4b71Sopenharmony_ci**示例:** 790e41f4b71Sopenharmony_ci 791e41f4b71Sopenharmony_ci```ts 792e41f4b71Sopenharmony_ci@Concurrent 793e41f4b71Sopenharmony_cifunction test() {} 794e41f4b71Sopenharmony_ci 795e41f4b71Sopenharmony_cilet result: Boolean = taskpool.isConcurrent(test) 796e41f4b71Sopenharmony_ciconsole.info("result is: " + result) 797e41f4b71Sopenharmony_ci``` 798e41f4b71Sopenharmony_ci 799e41f4b71Sopenharmony_ci## taskpool.getTaskPoolInfo<sup>10+</sup> 800e41f4b71Sopenharmony_ci 801e41f4b71Sopenharmony_cigetTaskPoolInfo(): TaskPoolInfo 802e41f4b71Sopenharmony_ci 803e41f4b71Sopenharmony_ci获取任务池内部信息,包含线程信息和任务信息。 804e41f4b71Sopenharmony_ci 805e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 806e41f4b71Sopenharmony_ci 807e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 808e41f4b71Sopenharmony_ci 809e41f4b71Sopenharmony_ci**返回值:** 810e41f4b71Sopenharmony_ci 811e41f4b71Sopenharmony_ci| 类型 | 说明 | 812e41f4b71Sopenharmony_ci| ----------------------------------- | ------------------ | 813e41f4b71Sopenharmony_ci| [TaskPoolInfo](#taskpoolinfo10) | 任务池的内部信息。 | 814e41f4b71Sopenharmony_ci 815e41f4b71Sopenharmony_ci**示例:** 816e41f4b71Sopenharmony_ci 817e41f4b71Sopenharmony_ci```ts 818e41f4b71Sopenharmony_cilet taskpoolInfo: taskpool.TaskPoolInfo = taskpool.getTaskPoolInfo(); 819e41f4b71Sopenharmony_ci``` 820e41f4b71Sopenharmony_ci 821e41f4b71Sopenharmony_ci## Priority 822e41f4b71Sopenharmony_ci 823e41f4b71Sopenharmony_ci表示所创建任务(Task)执行时的优先级。工作线程优先级跟随任务优先级同步更新,对应关系参考[QoS等级定义](../../napi/qos-guidelines.md#qos等级定义)。 824e41f4b71Sopenharmony_ci 825e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 826e41f4b71Sopenharmony_ci 827e41f4b71Sopenharmony_ci| 名称 | 值 | 说明 | 828e41f4b71Sopenharmony_ci| -------- | -------- | -------- | 829e41f4b71Sopenharmony_ci| HIGH | 0 | 任务为高优先级。<br/>**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 | 830e41f4b71Sopenharmony_ci| MEDIUM | 1 | 任务为中优先级。<br/>**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 | 831e41f4b71Sopenharmony_ci| LOW | 2 | 任务为低优先级。<br/>**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 | 832e41f4b71Sopenharmony_ci| IDLE<sup>12+</sup> | 3 | 任务为后台任务。<br/>**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 | 833e41f4b71Sopenharmony_ci 834e41f4b71Sopenharmony_ci**示例:** 835e41f4b71Sopenharmony_ci 836e41f4b71Sopenharmony_ci```ts 837e41f4b71Sopenharmony_ci@Concurrent 838e41f4b71Sopenharmony_cifunction printArgs(args: number): number { 839e41f4b71Sopenharmony_ci let t: number = Date.now(); 840e41f4b71Sopenharmony_ci while (Date.now() - t < 1000) { // 1000: delay 1s 841e41f4b71Sopenharmony_ci continue; 842e41f4b71Sopenharmony_ci } 843e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 844e41f4b71Sopenharmony_ci return args; 845e41f4b71Sopenharmony_ci} 846e41f4b71Sopenharmony_ci 847e41f4b71Sopenharmony_cilet allCount = 100; // 100: test number 848e41f4b71Sopenharmony_cilet taskArray: Array<taskpool.Task> = []; 849e41f4b71Sopenharmony_ci// 创建400个任务并添加至taskArray 850e41f4b71Sopenharmony_cifor (let i: number = 0; i < allCount; i++) { 851e41f4b71Sopenharmony_ci let task1: taskpool.Task = new taskpool.Task(printArgs, i); 852e41f4b71Sopenharmony_ci taskArray.push(task1); 853e41f4b71Sopenharmony_ci let task2: taskpool.Task = new taskpool.Task(printArgs, i * 10); // 10: test number 854e41f4b71Sopenharmony_ci taskArray.push(task2); 855e41f4b71Sopenharmony_ci let task3: taskpool.Task = new taskpool.Task(printArgs, i * 100); // 100: test number 856e41f4b71Sopenharmony_ci taskArray.push(task3); 857e41f4b71Sopenharmony_ci let task4: taskpool.Task = new taskpool.Task(printArgs, i * 1000); // 1000: test number 858e41f4b71Sopenharmony_ci taskArray.push(task4); 859e41f4b71Sopenharmony_ci} 860e41f4b71Sopenharmony_ci 861e41f4b71Sopenharmony_ci// 从taskArray中获取不同的任务并给定不同优先级执行 862e41f4b71Sopenharmony_cifor (let i: number = 0; i < taskArray.length; i+=4) { // 4: 每次执行4个任务,循环取任务时需后移4项,确保执行的是不同的任务 863e41f4b71Sopenharmony_ci taskpool.execute(taskArray[i], taskpool.Priority.HIGH); 864e41f4b71Sopenharmony_ci taskpool.execute(taskArray[i + 1], taskpool.Priority.LOW); 865e41f4b71Sopenharmony_ci taskpool.execute(taskArray[i + 2], taskpool.Priority.MEDIUM); 866e41f4b71Sopenharmony_ci taskpool.execute(taskArray[i + 3], taskpool.Priority.IDLE); 867e41f4b71Sopenharmony_ci} 868e41f4b71Sopenharmony_ci``` 869e41f4b71Sopenharmony_ci 870e41f4b71Sopenharmony_ci## Task 871e41f4b71Sopenharmony_ci 872e41f4b71Sopenharmony_ci表示任务。使用[constructor](#constructor)方法构造Task。任务可以多次执行或放入任务组执行或放入串行队列执行或添加依赖关系执行。 873e41f4b71Sopenharmony_ci 874e41f4b71Sopenharmony_ci### 属性 875e41f4b71Sopenharmony_ci 876e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 877e41f4b71Sopenharmony_ci 878e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 879e41f4b71Sopenharmony_ci 880e41f4b71Sopenharmony_ci| 名称 | 类型 | 可读 | 可写 | 说明 | 881e41f4b71Sopenharmony_ci| -------------------- | --------- | ---- | ---- | ------------------------------------------------------------ | 882e41f4b71Sopenharmony_ci| function | Function | 是 | 是 | 创建任务时需要传入的函数,支持的函数返回值类型请查[序列化支持类型](#序列化支持类型)。 | 883e41f4b71Sopenharmony_ci| arguments | Object[] | 是 | 是 | 创建任务传入函数所需的参数,支持的参数类型请查[序列化支持类型](#序列化支持类型)。 | 884e41f4b71Sopenharmony_ci| name<sup>11+</sup> | string | 是 | 否 | 创建任务时指定的任务名称。 | 885e41f4b71Sopenharmony_ci| totalDuration<sup>11+</sup> | number | 是 | 否 | 执行任务总耗时。 | 886e41f4b71Sopenharmony_ci| ioDuration<sup>11+</sup> | number | 是 | 否 | 执行任务异步IO耗时。 | 887e41f4b71Sopenharmony_ci| cpuDuration<sup>11+</sup> | number | 是 | 否 | 执行任务CPU耗时。 | 888e41f4b71Sopenharmony_ci 889e41f4b71Sopenharmony_ci### constructor 890e41f4b71Sopenharmony_ci 891e41f4b71Sopenharmony_ciconstructor(func: Function, ...args: Object[]) 892e41f4b71Sopenharmony_ci 893e41f4b71Sopenharmony_ciTask的构造函数。 894e41f4b71Sopenharmony_ci 895e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 896e41f4b71Sopenharmony_ci 897e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 898e41f4b71Sopenharmony_ci 899e41f4b71Sopenharmony_ci**参数:** 900e41f4b71Sopenharmony_ci 901e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 902e41f4b71Sopenharmony_ci| ------ | --------- | ---- | -------------------------------------------------------------------- | 903e41f4b71Sopenharmony_ci| func | Function | 是 | 执行的逻辑需要传入函数,必须使用[@Concurrent装饰器](../../arkts-utils/taskpool-introduction.md#concurrent装饰器)装饰,支持的函数返回值类型请查[序列化支持类型](#序列化支持类型)。 | 904e41f4b71Sopenharmony_ci| args | Object[] | 否 | 任务执行传入函数的入参,支持的参数类型请查[序列化支持类型](#序列化支持类型)。默认值为undefined。 | 905e41f4b71Sopenharmony_ci 906e41f4b71Sopenharmony_ci**错误码:** 907e41f4b71Sopenharmony_ci 908e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 909e41f4b71Sopenharmony_ci 910e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 911e41f4b71Sopenharmony_ci| -------- | --------------------------------------- | 912e41f4b71Sopenharmony_ci| 401 | The input parameters are invalid. | 913e41f4b71Sopenharmony_ci| 10200014 | The function is not marked as concurrent. | 914e41f4b71Sopenharmony_ci 915e41f4b71Sopenharmony_ci**示例:** 916e41f4b71Sopenharmony_ci 917e41f4b71Sopenharmony_ci```ts 918e41f4b71Sopenharmony_ci@Concurrent 919e41f4b71Sopenharmony_cifunction printArgs(args: number): number { 920e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 921e41f4b71Sopenharmony_ci return args; 922e41f4b71Sopenharmony_ci} 923e41f4b71Sopenharmony_ci 924e41f4b71Sopenharmony_cilet task: taskpool.Task = new taskpool.Task(printArgs, "this is my first Task"); 925e41f4b71Sopenharmony_ci``` 926e41f4b71Sopenharmony_ci 927e41f4b71Sopenharmony_ci### constructor<sup>11+</sup> 928e41f4b71Sopenharmony_ci 929e41f4b71Sopenharmony_ciconstructor(name: string, func: Function, ...args: Object[]) 930e41f4b71Sopenharmony_ci 931e41f4b71Sopenharmony_ciTask的构造函数,可以指定任务名称。 932e41f4b71Sopenharmony_ci 933e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 934e41f4b71Sopenharmony_ci 935e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 936e41f4b71Sopenharmony_ci 937e41f4b71Sopenharmony_ci**参数:** 938e41f4b71Sopenharmony_ci 939e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 940e41f4b71Sopenharmony_ci| ------ | -------- | ---- | ------------------------------------------------------------ | 941e41f4b71Sopenharmony_ci| name | string | 是 | 任务名称。 | 942e41f4b71Sopenharmony_ci| func | Function | 是 | 执行的逻辑需要传入函数,必须使用[@Concurrent装饰器](../../arkts-utils/taskpool-introduction.md#concurrent装饰器)装饰,支持的函数返回值类型请查[序列化支持类型](#序列化支持类型)。 | 943e41f4b71Sopenharmony_ci| args | Object[] | 否 | 任务执行传入函数的入参,支持的参数类型请查[序列化支持类型](#序列化支持类型)。默认值为undefined。 | 944e41f4b71Sopenharmony_ci 945e41f4b71Sopenharmony_ci**错误码:** 946e41f4b71Sopenharmony_ci 947e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 948e41f4b71Sopenharmony_ci 949e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 950e41f4b71Sopenharmony_ci| -------- | --------------------------------------- | 951e41f4b71Sopenharmony_ci| 401 | The input parameters are invalid. | 952e41f4b71Sopenharmony_ci| 10200014 | The function is not marked as concurrent. | 953e41f4b71Sopenharmony_ci 954e41f4b71Sopenharmony_ci**示例:** 955e41f4b71Sopenharmony_ci 956e41f4b71Sopenharmony_ci```ts 957e41f4b71Sopenharmony_ci@Concurrent 958e41f4b71Sopenharmony_cifunction printArgs(args: string): string { 959e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 960e41f4b71Sopenharmony_ci return args; 961e41f4b71Sopenharmony_ci} 962e41f4b71Sopenharmony_ci 963e41f4b71Sopenharmony_cilet taskName: string = "taskName"; 964e41f4b71Sopenharmony_cilet task: taskpool.Task = new taskpool.Task(taskName, printArgs, "this is my first Task"); 965e41f4b71Sopenharmony_cilet name: string = task.name; 966e41f4b71Sopenharmony_ci``` 967e41f4b71Sopenharmony_ci 968e41f4b71Sopenharmony_ci### isCanceled<sup>10+</sup> 969e41f4b71Sopenharmony_ci 970e41f4b71Sopenharmony_cistatic isCanceled(): boolean 971e41f4b71Sopenharmony_ci 972e41f4b71Sopenharmony_ci检查当前正在运行的任务是否已取消。使用该方法前需要先构造Task。 973e41f4b71Sopenharmony_ci 974e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 975e41f4b71Sopenharmony_ci 976e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 977e41f4b71Sopenharmony_ci 978e41f4b71Sopenharmony_ci**返回值:** 979e41f4b71Sopenharmony_ci 980e41f4b71Sopenharmony_ci| 类型 | 说明 | 981e41f4b71Sopenharmony_ci| ------- | ------------------------------------ | 982e41f4b71Sopenharmony_ci| boolean | 如果当前正在运行的任务被取消返回true,未被取消返回false。| 983e41f4b71Sopenharmony_ci 984e41f4b71Sopenharmony_ci**示例:** 985e41f4b71Sopenharmony_ci 986e41f4b71Sopenharmony_ci```ts 987e41f4b71Sopenharmony_ci@Concurrent 988e41f4b71Sopenharmony_cifunction inspectStatus(arg: number): number { 989e41f4b71Sopenharmony_ci // do something 990e41f4b71Sopenharmony_ci if (taskpool.Task.isCanceled()) { 991e41f4b71Sopenharmony_ci console.info("task has been canceled."); 992e41f4b71Sopenharmony_ci // do something 993e41f4b71Sopenharmony_ci return arg + 1; 994e41f4b71Sopenharmony_ci } 995e41f4b71Sopenharmony_ci // do something 996e41f4b71Sopenharmony_ci return arg; 997e41f4b71Sopenharmony_ci} 998e41f4b71Sopenharmony_ci``` 999e41f4b71Sopenharmony_ci 1000e41f4b71Sopenharmony_ci> **说明:** 1001e41f4b71Sopenharmony_ci> 1002e41f4b71Sopenharmony_ci> isCanceled方法需要和taskpool.cancel方法搭配使用,如果不调用cancel方法,isCanceled方法默认返回false。 1003e41f4b71Sopenharmony_ci 1004e41f4b71Sopenharmony_ci**示例:** 1005e41f4b71Sopenharmony_ci 1006e41f4b71Sopenharmony_ci```ts 1007e41f4b71Sopenharmony_ci@Concurrent 1008e41f4b71Sopenharmony_cifunction inspectStatus(arg: number): number { 1009e41f4b71Sopenharmony_ci // 第一次检查任务是否已经取消并作出响应 1010e41f4b71Sopenharmony_ci if (taskpool.Task.isCanceled()) { 1011e41f4b71Sopenharmony_ci console.info("task has been canceled before 2s sleep."); 1012e41f4b71Sopenharmony_ci return arg + 2; 1013e41f4b71Sopenharmony_ci } 1014e41f4b71Sopenharmony_ci // 延时2s 1015e41f4b71Sopenharmony_ci let t: number = Date.now(); 1016e41f4b71Sopenharmony_ci while (Date.now() - t < 2000) { 1017e41f4b71Sopenharmony_ci continue; 1018e41f4b71Sopenharmony_ci } 1019e41f4b71Sopenharmony_ci // 第二次检查任务是否已经取消并作出响应 1020e41f4b71Sopenharmony_ci if (taskpool.Task.isCanceled()) { 1021e41f4b71Sopenharmony_ci console.info("task has been canceled after 2s sleep."); 1022e41f4b71Sopenharmony_ci return arg + 3; 1023e41f4b71Sopenharmony_ci } 1024e41f4b71Sopenharmony_ci return arg + 1; 1025e41f4b71Sopenharmony_ci} 1026e41f4b71Sopenharmony_ci 1027e41f4b71Sopenharmony_cilet task: taskpool.Task = new taskpool.Task(inspectStatus, 100); // 100: test number 1028e41f4b71Sopenharmony_citaskpool.execute(task).then((res: Object)=>{ 1029e41f4b71Sopenharmony_ci console.info("taskpool test result: " + res); 1030e41f4b71Sopenharmony_ci}).catch((err: string) => { 1031e41f4b71Sopenharmony_ci console.error("taskpool test occur error: " + err); 1032e41f4b71Sopenharmony_ci}); 1033e41f4b71Sopenharmony_ci// 不调用cancel,isCanceled()默认返回false,task执行的结果为101 1034e41f4b71Sopenharmony_ci``` 1035e41f4b71Sopenharmony_ci 1036e41f4b71Sopenharmony_ci### setTransferList<sup>10+</sup> 1037e41f4b71Sopenharmony_ci 1038e41f4b71Sopenharmony_cisetTransferList(transfer?: ArrayBuffer[]): void 1039e41f4b71Sopenharmony_ci 1040e41f4b71Sopenharmony_ci设置任务的传输列表。使用该方法前需要先构造Task。不调用该接口,则传给任务的数据中的ArrayBuffer默认transfer转移。 1041e41f4b71Sopenharmony_ci 1042e41f4b71Sopenharmony_ci> **说明:** 1043e41f4b71Sopenharmony_ci> 1044e41f4b71Sopenharmony_ci> 此接口可以设置任务池中ArrayBuffer的transfer列表,transfer列表中的ArrayBuffer对象在传输时不会复制buffer内容到工作线程而是转移buffer控制权至工作线程,传输后当前的ArrayBuffer失效。若ArrayBuffer为空,则不会transfer转移。 1045e41f4b71Sopenharmony_ci 1046e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1047e41f4b71Sopenharmony_ci 1048e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 1049e41f4b71Sopenharmony_ci 1050e41f4b71Sopenharmony_ci**参数:** 1051e41f4b71Sopenharmony_ci 1052e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1053e41f4b71Sopenharmony_ci| -------- | ------------- | ---- | --------------------------------------------- | 1054e41f4b71Sopenharmony_ci| transfer | ArrayBuffer[] | 否 | 可传输对象是ArrayBuffer的实例对象,默认为空数组。 | 1055e41f4b71Sopenharmony_ci 1056e41f4b71Sopenharmony_ci**错误码:** 1057e41f4b71Sopenharmony_ci 1058e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 1059e41f4b71Sopenharmony_ci 1060e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 1061e41f4b71Sopenharmony_ci| -------- | -------------------------------------------------------------- | 1062e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Incorrect parameter types; 2. Parameter verification failed. | 1063e41f4b71Sopenharmony_ci| 10200029 | An ArrayBuffer cannot be set as both a transfer list and a clone list. | 1064e41f4b71Sopenharmony_ci 1065e41f4b71Sopenharmony_ci**示例:** 1066e41f4b71Sopenharmony_ci 1067e41f4b71Sopenharmony_ci```ts 1068e41f4b71Sopenharmony_ci@Concurrent 1069e41f4b71Sopenharmony_cifunction testTransfer(arg1: ArrayBuffer, arg2: ArrayBuffer): number { 1070e41f4b71Sopenharmony_ci console.info("testTransfer arg1 byteLength: " + arg1.byteLength); 1071e41f4b71Sopenharmony_ci console.info("testTransfer arg2 byteLength: " + arg2.byteLength); 1072e41f4b71Sopenharmony_ci return 100; 1073e41f4b71Sopenharmony_ci} 1074e41f4b71Sopenharmony_ci 1075e41f4b71Sopenharmony_cilet buffer: ArrayBuffer = new ArrayBuffer(8); 1076e41f4b71Sopenharmony_cilet view: Uint8Array = new Uint8Array(buffer); 1077e41f4b71Sopenharmony_cilet buffer1: ArrayBuffer = new ArrayBuffer(16); 1078e41f4b71Sopenharmony_cilet view1: Uint8Array = new Uint8Array(buffer1); 1079e41f4b71Sopenharmony_ci 1080e41f4b71Sopenharmony_ciconsole.info("testTransfer view byteLength: " + view.byteLength); 1081e41f4b71Sopenharmony_ciconsole.info("testTransfer view1 byteLength: " + view1.byteLength); 1082e41f4b71Sopenharmony_ci// 执行结果为: 1083e41f4b71Sopenharmony_ci// testTransfer view byteLength: 8 1084e41f4b71Sopenharmony_ci// testTransfer view1 byteLength: 16 1085e41f4b71Sopenharmony_ci 1086e41f4b71Sopenharmony_cilet task: taskpool.Task = new taskpool.Task(testTransfer, view, view1); 1087e41f4b71Sopenharmony_citask.setTransferList([view.buffer, view1.buffer]); 1088e41f4b71Sopenharmony_citaskpool.execute(task).then((res: Object)=>{ 1089e41f4b71Sopenharmony_ci console.info("test result: " + res); 1090e41f4b71Sopenharmony_ci}).catch((e: string)=>{ 1091e41f4b71Sopenharmony_ci console.error("test catch: " + e); 1092e41f4b71Sopenharmony_ci}) 1093e41f4b71Sopenharmony_ciconsole.info("testTransfer view2 byteLength: " + view.byteLength); 1094e41f4b71Sopenharmony_ciconsole.info("testTransfer view3 byteLength: " + view1.byteLength); 1095e41f4b71Sopenharmony_ci// 经过transfer转移之后值为0,执行结果为: 1096e41f4b71Sopenharmony_ci// testTransfer view2 byteLength: 0 1097e41f4b71Sopenharmony_ci// testTransfer view3 byteLength: 0 1098e41f4b71Sopenharmony_ci``` 1099e41f4b71Sopenharmony_ci 1100e41f4b71Sopenharmony_ci 1101e41f4b71Sopenharmony_ci### setCloneList<sup>11+</sup> 1102e41f4b71Sopenharmony_ci 1103e41f4b71Sopenharmony_cisetCloneList(cloneList: Object[] | ArrayBuffer[]): void 1104e41f4b71Sopenharmony_ci 1105e41f4b71Sopenharmony_ci设置任务的拷贝列表。使用该方法前需要先构造Task。 1106e41f4b71Sopenharmony_ci 1107e41f4b71Sopenharmony_ci> **说明:** 1108e41f4b71Sopenharmony_ci> 1109e41f4b71Sopenharmony_ci> 需搭配[@Sendable装饰器](../../arkts-utils/sendable-overview.md#sendable装饰器)使用,否则会抛异常。 1110e41f4b71Sopenharmony_ci 1111e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1112e41f4b71Sopenharmony_ci 1113e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 1114e41f4b71Sopenharmony_ci 1115e41f4b71Sopenharmony_ci**参数:** 1116e41f4b71Sopenharmony_ci 1117e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1118e41f4b71Sopenharmony_ci| --------- | ------------------------ | ---- | --------------------------------------------- | 1119e41f4b71Sopenharmony_ci| cloneList | Object[] \| ArrayBuffer[] | 是 | - 传入数组的类型必须为[Sendable支持的数据类型](../../arkts-utils/sendable-overview.md#sendable支持的数据类型)或ArrayBuffer。<br/>- 所有传入cloneList的对象持有的[Sendable class](../../arkts-utils/sendable-overview.md#sendable-class)实例或ArrayBuffer类型对象,在线程间传输的行为都会变成拷贝传递,即修改传输后的对象不会对原有对象产生任何影响。 | 1120e41f4b71Sopenharmony_ci 1121e41f4b71Sopenharmony_ci**错误码:** 1122e41f4b71Sopenharmony_ci 1123e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 1124e41f4b71Sopenharmony_ci 1125e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 1126e41f4b71Sopenharmony_ci| -------- | -------------------------------------------------------------- | 1127e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 1128e41f4b71Sopenharmony_ci| 10200029 | An ArrayBuffer cannot be set as both a transfer list and a clone list. | 1129e41f4b71Sopenharmony_ci 1130e41f4b71Sopenharmony_ci**示例:** 1131e41f4b71Sopenharmony_ci 1132e41f4b71Sopenharmony_ci```ts 1133e41f4b71Sopenharmony_ci// sendable.ets 1134e41f4b71Sopenharmony_ci// 定义两个Sendable class:BaseClass及其子类DeriveClass 1135e41f4b71Sopenharmony_ci@Sendable 1136e41f4b71Sopenharmony_ciexport class BaseClass { 1137e41f4b71Sopenharmony_ci private str: string = "sendable: BaseClass"; 1138e41f4b71Sopenharmony_ci static num :number = 10; 1139e41f4b71Sopenharmony_ci str1: string = "sendable: this is BaseClass's string"; 1140e41f4b71Sopenharmony_ci num1: number = 5; 1141e41f4b71Sopenharmony_ci isDone1: boolean = false; 1142e41f4b71Sopenharmony_ci 1143e41f4b71Sopenharmony_ci private fibonacciRecursive(n: number): number { 1144e41f4b71Sopenharmony_ci if (n <= 1) { 1145e41f4b71Sopenharmony_ci return n; 1146e41f4b71Sopenharmony_ci } else { 1147e41f4b71Sopenharmony_ci return this.fibonacciRecursive(n - 1) + this.fibonacciRecursive(n - 2); 1148e41f4b71Sopenharmony_ci } 1149e41f4b71Sopenharmony_ci } 1150e41f4b71Sopenharmony_ci 1151e41f4b71Sopenharmony_ci private privateFunc(num: number): number{ 1152e41f4b71Sopenharmony_ci let res: number = this.fibonacciRecursive(num); 1153e41f4b71Sopenharmony_ci console.info("sendable: BaseClass privateFunc res is: " + res); 1154e41f4b71Sopenharmony_ci return res; 1155e41f4b71Sopenharmony_ci } 1156e41f4b71Sopenharmony_ci 1157e41f4b71Sopenharmony_ci publicFunc(num: number): number { 1158e41f4b71Sopenharmony_ci return this.privateFunc(num); 1159e41f4b71Sopenharmony_ci } 1160e41f4b71Sopenharmony_ci 1161e41f4b71Sopenharmony_ci get GetNum(): number { 1162e41f4b71Sopenharmony_ci return this.num1; 1163e41f4b71Sopenharmony_ci } 1164e41f4b71Sopenharmony_ci set SetNum(num: number) { 1165e41f4b71Sopenharmony_ci this.num1 = num; 1166e41f4b71Sopenharmony_ci } 1167e41f4b71Sopenharmony_ci 1168e41f4b71Sopenharmony_ci constructor(){ 1169e41f4b71Sopenharmony_ci console.info(this.str); 1170e41f4b71Sopenharmony_ci this.isDone1 = true; 1171e41f4b71Sopenharmony_ci } 1172e41f4b71Sopenharmony_ci} 1173e41f4b71Sopenharmony_ci 1174e41f4b71Sopenharmony_ci@Sendable 1175e41f4b71Sopenharmony_ciexport class DeriveClass extends BaseClass { 1176e41f4b71Sopenharmony_ci name: string = "sendable: this is DeriveClass"; 1177e41f4b71Sopenharmony_ci printName() { 1178e41f4b71Sopenharmony_ci console.info(this.name); 1179e41f4b71Sopenharmony_ci } 1180e41f4b71Sopenharmony_ci constructor() { 1181e41f4b71Sopenharmony_ci super(); 1182e41f4b71Sopenharmony_ci } 1183e41f4b71Sopenharmony_ci} 1184e41f4b71Sopenharmony_ci``` 1185e41f4b71Sopenharmony_ci 1186e41f4b71Sopenharmony_ci<!--code_no_check--> 1187e41f4b71Sopenharmony_ci```ts 1188e41f4b71Sopenharmony_ci// index.ets 1189e41f4b71Sopenharmony_ci// 主线程调用taskpool,在taskpool线程中调用BaseClass和DeriveClass的方法、访问对应属性 1190e41f4b71Sopenharmony_ciimport { taskpool } from '@kit.ArkTS' 1191e41f4b71Sopenharmony_ciimport { BusinessError } from '@kit.BasicServicesKit' 1192e41f4b71Sopenharmony_ciimport { BaseClass, DeriveClass } from './sendable' 1193e41f4b71Sopenharmony_ci 1194e41f4b71Sopenharmony_ci@Concurrent 1195e41f4b71Sopenharmony_cifunction testFunc(arr: Array<BaseClass>, num: number): number { 1196e41f4b71Sopenharmony_ci let baseInstance1 = arr[0]; 1197e41f4b71Sopenharmony_ci console.info("sendable: str1 is: " + baseInstance1.str1); 1198e41f4b71Sopenharmony_ci baseInstance1.SetNum = 100; 1199e41f4b71Sopenharmony_ci console.info("sendable: num1 is: " + baseInstance1.GetNum); 1200e41f4b71Sopenharmony_ci console.info("sendable: isDone1 is: " + baseInstance1.isDone1); 1201e41f4b71Sopenharmony_ci // 获取斐波那契数列第num项的结果 1202e41f4b71Sopenharmony_ci let res: number = baseInstance1.publicFunc(num); 1203e41f4b71Sopenharmony_ci return res; 1204e41f4b71Sopenharmony_ci} 1205e41f4b71Sopenharmony_ci 1206e41f4b71Sopenharmony_ci@Concurrent 1207e41f4b71Sopenharmony_cifunction printLog(arr: Array<DeriveClass>): void { 1208e41f4b71Sopenharmony_ci let deriveInstance = arr[0]; 1209e41f4b71Sopenharmony_ci deriveInstance.printName(); 1210e41f4b71Sopenharmony_ci} 1211e41f4b71Sopenharmony_ci 1212e41f4b71Sopenharmony_ci@Entry 1213e41f4b71Sopenharmony_ci@Component 1214e41f4b71Sopenharmony_cistruct Index { 1215e41f4b71Sopenharmony_ci @State message: string = 'Hello World' 1216e41f4b71Sopenharmony_ci 1217e41f4b71Sopenharmony_ci build() { 1218e41f4b71Sopenharmony_ci Row() { 1219e41f4b71Sopenharmony_ci Column() { 1220e41f4b71Sopenharmony_ci Text(this.message) 1221e41f4b71Sopenharmony_ci .fontSize(50) 1222e41f4b71Sopenharmony_ci .fontWeight(FontWeight.Bold) 1223e41f4b71Sopenharmony_ci Button() { 1224e41f4b71Sopenharmony_ci Text("TaskPool Test") 1225e41f4b71Sopenharmony_ci }.onClick(() => { 1226e41f4b71Sopenharmony_ci // task1访问调用BaseClass.str1/BaseClass.SetNum/BaseClass.GetNum/BaseClass.isDone1/BaseClass.publicFunc 1227e41f4b71Sopenharmony_ci let baseInstance1: BaseClass = new BaseClass(); 1228e41f4b71Sopenharmony_ci let array1 = new Array<BaseClass>(); 1229e41f4b71Sopenharmony_ci array1.push(baseInstance1); 1230e41f4b71Sopenharmony_ci let task1 = new taskpool.Task(testFunc, array1, 10); 1231e41f4b71Sopenharmony_ci task1.setCloneList(array1); 1232e41f4b71Sopenharmony_ci taskpool.execute(task1).then((res: Object) => { 1233e41f4b71Sopenharmony_ci console.info("sendable: task1 res is: " + res); 1234e41f4b71Sopenharmony_ci }).catch((e:BusinessError) => { 1235e41f4b71Sopenharmony_ci console.error(`sendable: task1 execute Code is ${e.code}, message is ${e.message}`); 1236e41f4b71Sopenharmony_ci }) 1237e41f4b71Sopenharmony_ci 1238e41f4b71Sopenharmony_ci // task2调用DeriveClass.printName 1239e41f4b71Sopenharmony_ci let deriveInstance: DeriveClass = new DeriveClass(); 1240e41f4b71Sopenharmony_ci let array2 = new Array<DeriveClass>(); 1241e41f4b71Sopenharmony_ci array2.push(deriveInstance); 1242e41f4b71Sopenharmony_ci let task2 = new taskpool.Task(printLog, array2); 1243e41f4b71Sopenharmony_ci task2.setCloneList(array2); 1244e41f4b71Sopenharmony_ci taskpool.execute(task2).then(() => { 1245e41f4b71Sopenharmony_ci console.info("sendable: task2 execute success"); 1246e41f4b71Sopenharmony_ci }).catch((e:BusinessError) => { 1247e41f4b71Sopenharmony_ci console.error(`sendable: task2 execute Code is ${e.code}, message is ${e.message}`); 1248e41f4b71Sopenharmony_ci }) 1249e41f4b71Sopenharmony_ci }) 1250e41f4b71Sopenharmony_ci .height('15%') 1251e41f4b71Sopenharmony_ci .width('30%') 1252e41f4b71Sopenharmony_ci } 1253e41f4b71Sopenharmony_ci .width('100%') 1254e41f4b71Sopenharmony_ci } 1255e41f4b71Sopenharmony_ci .height('100%') 1256e41f4b71Sopenharmony_ci } 1257e41f4b71Sopenharmony_ci} 1258e41f4b71Sopenharmony_ci``` 1259e41f4b71Sopenharmony_ci 1260e41f4b71Sopenharmony_ci 1261e41f4b71Sopenharmony_ci### sendData<sup>11+</sup> 1262e41f4b71Sopenharmony_ci 1263e41f4b71Sopenharmony_cistatic sendData(...args: Object[]): void 1264e41f4b71Sopenharmony_ci 1265e41f4b71Sopenharmony_ci在任务执行过程中向宿主线程发送消息并触发回调。使用该方法前需要先构造Task。 1266e41f4b71Sopenharmony_ci 1267e41f4b71Sopenharmony_ci> **说明:** 1268e41f4b71Sopenharmony_ci> 1269e41f4b71Sopenharmony_ci> - 该接口在taskpool的线程中调用。 1270e41f4b71Sopenharmony_ci> - 避免在回调函数中使用该方法。 1271e41f4b71Sopenharmony_ci> - 调用该接口时确保处理数据的回调函数在宿主线程已注册。 1272e41f4b71Sopenharmony_ci 1273e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1274e41f4b71Sopenharmony_ci 1275e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 1276e41f4b71Sopenharmony_ci 1277e41f4b71Sopenharmony_ci**参数:** 1278e41f4b71Sopenharmony_ci 1279e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1280e41f4b71Sopenharmony_ci| -------- | ------------- | ---- | ------------------------------------------------- | 1281e41f4b71Sopenharmony_ci| args | Object[] | 否 | 可传输对象默认转移,作为回调函数的参数,支持的参数类型请查[序列化支持类型](#序列化支持类型)。默认值为undefined。 | 1282e41f4b71Sopenharmony_ci 1283e41f4b71Sopenharmony_ci**错误码:** 1284e41f4b71Sopenharmony_ci 1285e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 1286e41f4b71Sopenharmony_ci 1287e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 1288e41f4b71Sopenharmony_ci| -------- | --------------------------------------- | 1289e41f4b71Sopenharmony_ci| 401 | The input parameters are invalid. | 1290e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. | 1291e41f4b71Sopenharmony_ci| 10200022 | The function is not called in the TaskPool thread. | 1292e41f4b71Sopenharmony_ci| 10200023 | The function is not called in the concurrent function. | 1293e41f4b71Sopenharmony_ci| 10200024 | The callback is not registered on the host side. | 1294e41f4b71Sopenharmony_ci 1295e41f4b71Sopenharmony_ci**示例:** 1296e41f4b71Sopenharmony_ci 1297e41f4b71Sopenharmony_ci```ts 1298e41f4b71Sopenharmony_ci@Concurrent 1299e41f4b71Sopenharmony_cifunction sendDataTest(num: number): number { 1300e41f4b71Sopenharmony_ci let res: number = num * 10; 1301e41f4b71Sopenharmony_ci taskpool.Task.sendData(res); 1302e41f4b71Sopenharmony_ci return num; 1303e41f4b71Sopenharmony_ci} 1304e41f4b71Sopenharmony_ci 1305e41f4b71Sopenharmony_cifunction printLog(data: number): void { 1306e41f4b71Sopenharmony_ci console.info("taskpool: data is: " + data); 1307e41f4b71Sopenharmony_ci} 1308e41f4b71Sopenharmony_ci 1309e41f4b71Sopenharmony_ciasync function taskpoolTest(): Promise<void> { 1310e41f4b71Sopenharmony_ci try { 1311e41f4b71Sopenharmony_ci let task: taskpool.Task = new taskpool.Task(sendDataTest, 1); 1312e41f4b71Sopenharmony_ci task.onReceiveData(printLog); 1313e41f4b71Sopenharmony_ci await taskpool.execute(task); 1314e41f4b71Sopenharmony_ci } catch (e) { 1315e41f4b71Sopenharmony_ci console.error(`taskpool: error code: ${e.code}, info: ${e.message}`); 1316e41f4b71Sopenharmony_ci } 1317e41f4b71Sopenharmony_ci} 1318e41f4b71Sopenharmony_ci 1319e41f4b71Sopenharmony_citaskpoolTest(); 1320e41f4b71Sopenharmony_ci``` 1321e41f4b71Sopenharmony_ci 1322e41f4b71Sopenharmony_ci 1323e41f4b71Sopenharmony_ci### onReceiveData<sup>11+</sup> 1324e41f4b71Sopenharmony_ci 1325e41f4b71Sopenharmony_cionReceiveData(callback?: Function): void 1326e41f4b71Sopenharmony_ci 1327e41f4b71Sopenharmony_ci为任务注册回调函数,以接收和处理来自任务池工作线程的数据。使用该方法前需要先构造Task。 1328e41f4b71Sopenharmony_ci 1329e41f4b71Sopenharmony_ci> **说明:** 1330e41f4b71Sopenharmony_ci> 1331e41f4b71Sopenharmony_ci> 不支持给同一个任务定义多种回调函数,如果重复赋值只有最后一个会生效。 1332e41f4b71Sopenharmony_ci 1333e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1334e41f4b71Sopenharmony_ci 1335e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 1336e41f4b71Sopenharmony_ci 1337e41f4b71Sopenharmony_ci**参数:** 1338e41f4b71Sopenharmony_ci 1339e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1340e41f4b71Sopenharmony_ci| -------- | -------- | ---- | ------------------------------------------------------------ | 1341e41f4b71Sopenharmony_ci| callback | Function | 否 | 处理数据的回调函数,发送到宿主线程的数据将会作为入参传入该回调函数。不传参可以取消注册的回调函数。 | 1342e41f4b71Sopenharmony_ci 1343e41f4b71Sopenharmony_ci**错误码:** 1344e41f4b71Sopenharmony_ci 1345e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 1346e41f4b71Sopenharmony_ci 1347e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 1348e41f4b71Sopenharmony_ci| -------- | -------- | 1349e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Incorrect parameter types; 2. Parameter verification failed. | 1350e41f4b71Sopenharmony_ci 1351e41f4b71Sopenharmony_ci**示例:** 1352e41f4b71Sopenharmony_ci 1353e41f4b71Sopenharmony_ci```ts 1354e41f4b71Sopenharmony_ci@Concurrent 1355e41f4b71Sopenharmony_cifunction ConcurrentFunc(num: number): number { 1356e41f4b71Sopenharmony_ci let res: number = num * 10; 1357e41f4b71Sopenharmony_ci taskpool.Task.sendData(res); 1358e41f4b71Sopenharmony_ci return num; 1359e41f4b71Sopenharmony_ci} 1360e41f4b71Sopenharmony_ci 1361e41f4b71Sopenharmony_cifunction printLog(data: number): void { 1362e41f4b71Sopenharmony_ci console.info("taskpool: data is: " + data); 1363e41f4b71Sopenharmony_ci} 1364e41f4b71Sopenharmony_ci 1365e41f4b71Sopenharmony_ciasync function testFunc(): Promise<void> { 1366e41f4b71Sopenharmony_ci try { 1367e41f4b71Sopenharmony_ci let task: taskpool.Task = new taskpool.Task(ConcurrentFunc, 1); 1368e41f4b71Sopenharmony_ci task.onReceiveData(printLog); 1369e41f4b71Sopenharmony_ci await taskpool.execute(task); 1370e41f4b71Sopenharmony_ci } catch (e) { 1371e41f4b71Sopenharmony_ci console.error(`taskpool: error code: ${e.code}, info: ${e.message}`); 1372e41f4b71Sopenharmony_ci } 1373e41f4b71Sopenharmony_ci} 1374e41f4b71Sopenharmony_ci 1375e41f4b71Sopenharmony_citestFunc(); 1376e41f4b71Sopenharmony_ci``` 1377e41f4b71Sopenharmony_ci 1378e41f4b71Sopenharmony_ci### addDependency<sup>11+</sup> 1379e41f4b71Sopenharmony_ci 1380e41f4b71Sopenharmony_ciaddDependency(...tasks: Task[]): void 1381e41f4b71Sopenharmony_ci 1382e41f4b71Sopenharmony_ci为当前任务添加对其他任务的依赖。使用该方法前需要先构造Task。该任务和被依赖的任务不可以是任务组任务、串行队列任务、已执行的任务和周期任务。存在依赖关系的任务(依赖其他任务的任务或被依赖的任务)执行后不可以再次执行。 1383e41f4b71Sopenharmony_ci 1384e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1385e41f4b71Sopenharmony_ci 1386e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 1387e41f4b71Sopenharmony_ci 1388e41f4b71Sopenharmony_ci**参数:** 1389e41f4b71Sopenharmony_ci 1390e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1391e41f4b71Sopenharmony_ci| ------ | --------------- | ---- | ------------------ | 1392e41f4b71Sopenharmony_ci| tasks | [Task](#task)[] | 否 | 被依赖的任务数组。默认值为undefined。 | 1393e41f4b71Sopenharmony_ci 1394e41f4b71Sopenharmony_ci**错误码:** 1395e41f4b71Sopenharmony_ci 1396e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 1397e41f4b71Sopenharmony_ci 1398e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 1399e41f4b71Sopenharmony_ci| -------- | ------------------------------- | 1400e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 1401e41f4b71Sopenharmony_ci| 10200026 | There is a circular dependency. | 1402e41f4b71Sopenharmony_ci| 10200052 | The periodic task cannot have a dependency. | 1403e41f4b71Sopenharmony_ci 1404e41f4b71Sopenharmony_ci**示例:** 1405e41f4b71Sopenharmony_ci 1406e41f4b71Sopenharmony_ci```ts 1407e41f4b71Sopenharmony_ci@Concurrent 1408e41f4b71Sopenharmony_cifunction delay(args: number): number { 1409e41f4b71Sopenharmony_ci let t: number = Date.now(); 1410e41f4b71Sopenharmony_ci while ((Date.now() - t) < 1000) { 1411e41f4b71Sopenharmony_ci continue; 1412e41f4b71Sopenharmony_ci } 1413e41f4b71Sopenharmony_ci return args; 1414e41f4b71Sopenharmony_ci} 1415e41f4b71Sopenharmony_ci 1416e41f4b71Sopenharmony_cilet task1:taskpool.Task = new taskpool.Task(delay, 100); 1417e41f4b71Sopenharmony_cilet task2:taskpool.Task = new taskpool.Task(delay, 200); 1418e41f4b71Sopenharmony_cilet task3:taskpool.Task = new taskpool.Task(delay, 200); 1419e41f4b71Sopenharmony_ci 1420e41f4b71Sopenharmony_ciconsole.info("dependency: add dependency start"); 1421e41f4b71Sopenharmony_citask1.addDependency(task2); 1422e41f4b71Sopenharmony_citask2.addDependency(task3); 1423e41f4b71Sopenharmony_ciconsole.info("dependency: add dependency end"); 1424e41f4b71Sopenharmony_ci 1425e41f4b71Sopenharmony_ciconsole.info("dependency: start execute second") 1426e41f4b71Sopenharmony_citaskpool.execute(task1).then(() => { 1427e41f4b71Sopenharmony_ci console.info("dependency: second task1 success"); 1428e41f4b71Sopenharmony_ci}) 1429e41f4b71Sopenharmony_citaskpool.execute(task2).then(() => { 1430e41f4b71Sopenharmony_ci console.info("dependency: second task2 success"); 1431e41f4b71Sopenharmony_ci}) 1432e41f4b71Sopenharmony_citaskpool.execute(task3).then(() => { 1433e41f4b71Sopenharmony_ci console.info("dependency: second task3 success"); 1434e41f4b71Sopenharmony_ci}) 1435e41f4b71Sopenharmony_ci``` 1436e41f4b71Sopenharmony_ci 1437e41f4b71Sopenharmony_ci### removeDependency<sup>11+</sup> 1438e41f4b71Sopenharmony_ci 1439e41f4b71Sopenharmony_ciremoveDependency(...tasks: Task[]): void 1440e41f4b71Sopenharmony_ci 1441e41f4b71Sopenharmony_ci删除当前任务对其他任务的依赖。使用该方法前需要先构造Task。 1442e41f4b71Sopenharmony_ci 1443e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1444e41f4b71Sopenharmony_ci 1445e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 1446e41f4b71Sopenharmony_ci 1447e41f4b71Sopenharmony_ci**参数:** 1448e41f4b71Sopenharmony_ci 1449e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1450e41f4b71Sopenharmony_ci| ------ | ------ | ---- | ------------------ | 1451e41f4b71Sopenharmony_ci| tasks | [Task](#task)[] | 否 | 被依赖的任务数组。默认值为undefined。 | 1452e41f4b71Sopenharmony_ci 1453e41f4b71Sopenharmony_ci**错误码:** 1454e41f4b71Sopenharmony_ci 1455e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 1456e41f4b71Sopenharmony_ci 1457e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 1458e41f4b71Sopenharmony_ci| -------- | ------------------------------ | 1459e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 1460e41f4b71Sopenharmony_ci| 10200027 | The dependency does not exist. | 1461e41f4b71Sopenharmony_ci| 10200052 | The periodic task cannot have a dependency. | 1462e41f4b71Sopenharmony_ci 1463e41f4b71Sopenharmony_ci**示例:** 1464e41f4b71Sopenharmony_ci 1465e41f4b71Sopenharmony_ci```ts 1466e41f4b71Sopenharmony_ci@Concurrent 1467e41f4b71Sopenharmony_cifunction delay(args: number): number { 1468e41f4b71Sopenharmony_ci let t: number = Date.now(); 1469e41f4b71Sopenharmony_ci while ((Date.now() - t) < 1000) { 1470e41f4b71Sopenharmony_ci continue; 1471e41f4b71Sopenharmony_ci } 1472e41f4b71Sopenharmony_ci return args; 1473e41f4b71Sopenharmony_ci} 1474e41f4b71Sopenharmony_ci 1475e41f4b71Sopenharmony_cilet task1:taskpool.Task = new taskpool.Task(delay, 100); 1476e41f4b71Sopenharmony_cilet task2:taskpool.Task = new taskpool.Task(delay, 200); 1477e41f4b71Sopenharmony_cilet task3:taskpool.Task = new taskpool.Task(delay, 200); 1478e41f4b71Sopenharmony_ci 1479e41f4b71Sopenharmony_ciconsole.info("dependency: add dependency start"); 1480e41f4b71Sopenharmony_citask1.addDependency(task2); 1481e41f4b71Sopenharmony_citask2.addDependency(task3); 1482e41f4b71Sopenharmony_ciconsole.info("dependency: add dependency end"); 1483e41f4b71Sopenharmony_ciconsole.info("dependency: remove dependency start"); 1484e41f4b71Sopenharmony_citask1.removeDependency(task2); 1485e41f4b71Sopenharmony_citask2.removeDependency(task3); 1486e41f4b71Sopenharmony_ciconsole.info("dependency: remove dependency end"); 1487e41f4b71Sopenharmony_ci 1488e41f4b71Sopenharmony_ciconsole.info("dependency: start execute") 1489e41f4b71Sopenharmony_citaskpool.execute(task1).then(() => { 1490e41f4b71Sopenharmony_ci console.info("dependency: task1 success"); 1491e41f4b71Sopenharmony_ci}) 1492e41f4b71Sopenharmony_citaskpool.execute(task2).then(() => { 1493e41f4b71Sopenharmony_ci console.info("dependency: task2 success"); 1494e41f4b71Sopenharmony_ci}) 1495e41f4b71Sopenharmony_citaskpool.execute(task3).then(() => { 1496e41f4b71Sopenharmony_ci console.info("dependency: task3 success"); 1497e41f4b71Sopenharmony_ci}) 1498e41f4b71Sopenharmony_ci``` 1499e41f4b71Sopenharmony_ci 1500e41f4b71Sopenharmony_ci 1501e41f4b71Sopenharmony_ci### onEnqueued<sup>12+</sup> 1502e41f4b71Sopenharmony_ci 1503e41f4b71Sopenharmony_cionEnqueued(callback: CallbackFunction): void 1504e41f4b71Sopenharmony_ci 1505e41f4b71Sopenharmony_ci注册一个回调函数,并在任务入队时调用它。需在任务执行前注册,否则会抛异常。 1506e41f4b71Sopenharmony_ci 1507e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1508e41f4b71Sopenharmony_ci 1509e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。 1510e41f4b71Sopenharmony_ci 1511e41f4b71Sopenharmony_ci**参数:** 1512e41f4b71Sopenharmony_ci 1513e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1514e41f4b71Sopenharmony_ci| ------ | ------ | ---- | ------------------ | 1515e41f4b71Sopenharmony_ci| callback | [CallbackFunction](#callbackfunction12) | 是 | 需注册的回调函数。 | 1516e41f4b71Sopenharmony_ci 1517e41f4b71Sopenharmony_ci**错误码:** 1518e41f4b71Sopenharmony_ci 1519e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 1520e41f4b71Sopenharmony_ci 1521e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 1522e41f4b71Sopenharmony_ci| -------- | ------------------------------ | 1523e41f4b71Sopenharmony_ci| 401 | The input parameters are invalid. | 1524e41f4b71Sopenharmony_ci| 10200034 | The executed task does not support the registration of listeners. | 1525e41f4b71Sopenharmony_ci 1526e41f4b71Sopenharmony_ci**示例:** 1527e41f4b71Sopenharmony_ci 1528e41f4b71Sopenharmony_ci```ts 1529e41f4b71Sopenharmony_ciimport { taskpool } from '@kit.ArkTS' 1530e41f4b71Sopenharmony_ci 1531e41f4b71Sopenharmony_ci@Concurrent 1532e41f4b71Sopenharmony_cifunction delay(args: number): number { 1533e41f4b71Sopenharmony_ci let t: number = Date.now(); 1534e41f4b71Sopenharmony_ci while ((Date.now() - t) < 1000) { 1535e41f4b71Sopenharmony_ci continue; 1536e41f4b71Sopenharmony_ci } 1537e41f4b71Sopenharmony_ci return args; 1538e41f4b71Sopenharmony_ci} 1539e41f4b71Sopenharmony_ci 1540e41f4b71Sopenharmony_cilet task: taskpool.Task = new taskpool.Task(delay, 1); 1541e41f4b71Sopenharmony_citask.onEnqueued(()=>{ 1542e41f4b71Sopenharmony_ci console.info("taskpool: onEnqueued") 1543e41f4b71Sopenharmony_ci}); 1544e41f4b71Sopenharmony_citaskpool.execute(task).then(()=> { 1545e41f4b71Sopenharmony_ci console.info("taskpool: execute task success") 1546e41f4b71Sopenharmony_ci}); 1547e41f4b71Sopenharmony_ci``` 1548e41f4b71Sopenharmony_ci 1549e41f4b71Sopenharmony_ci 1550e41f4b71Sopenharmony_ci### onStartExecution<sup>12+</sup> 1551e41f4b71Sopenharmony_ci 1552e41f4b71Sopenharmony_cionStartExecution(callback: CallbackFunction): void 1553e41f4b71Sopenharmony_ci 1554e41f4b71Sopenharmony_ci注册一个回调函数,并在执行任务前调用它。需在任务执行前注册,否则会抛异常。 1555e41f4b71Sopenharmony_ci 1556e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1557e41f4b71Sopenharmony_ci 1558e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。 1559e41f4b71Sopenharmony_ci 1560e41f4b71Sopenharmony_ci**参数:** 1561e41f4b71Sopenharmony_ci 1562e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1563e41f4b71Sopenharmony_ci| ------ | ------ | ---- | ------------------ | 1564e41f4b71Sopenharmony_ci| callback | [CallbackFunction](#callbackfunction12) | 是 | 需注册的回调函数。 | 1565e41f4b71Sopenharmony_ci 1566e41f4b71Sopenharmony_ci**错误码:** 1567e41f4b71Sopenharmony_ci 1568e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 1569e41f4b71Sopenharmony_ci 1570e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 1571e41f4b71Sopenharmony_ci| -------- | ------------------------------ | 1572e41f4b71Sopenharmony_ci| 401 | The input parameters are invalid. | 1573e41f4b71Sopenharmony_ci| 10200034 | The executed task does not support the registration of listeners. | 1574e41f4b71Sopenharmony_ci 1575e41f4b71Sopenharmony_ci**示例:** 1576e41f4b71Sopenharmony_ci 1577e41f4b71Sopenharmony_ci```ts 1578e41f4b71Sopenharmony_ciimport { taskpool } from '@kit.ArkTS' 1579e41f4b71Sopenharmony_ci 1580e41f4b71Sopenharmony_ci@Concurrent 1581e41f4b71Sopenharmony_cifunction delay(args: number): number { 1582e41f4b71Sopenharmony_ci let t: number = Date.now(); 1583e41f4b71Sopenharmony_ci while ((Date.now() - t) < 1000) { 1584e41f4b71Sopenharmony_ci continue; 1585e41f4b71Sopenharmony_ci } 1586e41f4b71Sopenharmony_ci return args; 1587e41f4b71Sopenharmony_ci} 1588e41f4b71Sopenharmony_ci 1589e41f4b71Sopenharmony_cilet task: taskpool.Task = new taskpool.Task(delay, 1); 1590e41f4b71Sopenharmony_citask.onStartExecution(()=>{ 1591e41f4b71Sopenharmony_ci console.info("taskpool: onStartExecution") 1592e41f4b71Sopenharmony_ci}); 1593e41f4b71Sopenharmony_citaskpool.execute(task).then(()=> { 1594e41f4b71Sopenharmony_ci console.info("taskpool: execute task success") 1595e41f4b71Sopenharmony_ci}); 1596e41f4b71Sopenharmony_ci``` 1597e41f4b71Sopenharmony_ci 1598e41f4b71Sopenharmony_ci### onExecutionFailed<sup>12+</sup> 1599e41f4b71Sopenharmony_ci 1600e41f4b71Sopenharmony_cionExecutionFailed(callback: CallbackFunctionWithError): void 1601e41f4b71Sopenharmony_ci 1602e41f4b71Sopenharmony_ci注册一个回调函数,并在任务执行失败时调用它。需在任务执行前注册,否则会抛异常。 1603e41f4b71Sopenharmony_ci 1604e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1605e41f4b71Sopenharmony_ci 1606e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。 1607e41f4b71Sopenharmony_ci 1608e41f4b71Sopenharmony_ci**参数:** 1609e41f4b71Sopenharmony_ci 1610e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1611e41f4b71Sopenharmony_ci| ------ | ------ | ---- | ------------------ | 1612e41f4b71Sopenharmony_ci| callback | [CallbackFunctionWithError](#callbackfunctionwitherror12) | 是 | 需注册的回调函数。 | 1613e41f4b71Sopenharmony_ci 1614e41f4b71Sopenharmony_ci**错误码:** 1615e41f4b71Sopenharmony_ci 1616e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 1617e41f4b71Sopenharmony_ci 1618e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 1619e41f4b71Sopenharmony_ci| -------- | ------------------------------ | 1620e41f4b71Sopenharmony_ci| 401 | The input parameters are invalid. | 1621e41f4b71Sopenharmony_ci| 10200034 | The executed task does not support the registration of listeners. | 1622e41f4b71Sopenharmony_ci 1623e41f4b71Sopenharmony_ci**示例:** 1624e41f4b71Sopenharmony_ci 1625e41f4b71Sopenharmony_ci```ts 1626e41f4b71Sopenharmony_ciimport { taskpool } from '@kit.ArkTS' 1627e41f4b71Sopenharmony_ciimport { BusinessError } from '@kit.BasicServicesKit' 1628e41f4b71Sopenharmony_ciimport { HashMap } from '@kit.ArkTS' 1629e41f4b71Sopenharmony_ci 1630e41f4b71Sopenharmony_ci@Concurrent 1631e41f4b71Sopenharmony_cifunction test(args:number) { 1632e41f4b71Sopenharmony_ci let t = Date.now() 1633e41f4b71Sopenharmony_ci while ((Date.now() - t) < 100) { 1634e41f4b71Sopenharmony_ci continue; 1635e41f4b71Sopenharmony_ci } 1636e41f4b71Sopenharmony_ci let hashMap1: HashMap<string, number> = new HashMap(); 1637e41f4b71Sopenharmony_ci hashMap1.set('a', args); 1638e41f4b71Sopenharmony_ci return hashMap1; 1639e41f4b71Sopenharmony_ci} 1640e41f4b71Sopenharmony_ci 1641e41f4b71Sopenharmony_cilet task2 = new taskpool.Task(test, 1); 1642e41f4b71Sopenharmony_citask2.onExecutionFailed((e:Error)=>{ 1643e41f4b71Sopenharmony_ci console.info("taskpool: onExecutionFailed error is " + e); 1644e41f4b71Sopenharmony_ci}) 1645e41f4b71Sopenharmony_citaskpool.execute(task2).then(()=>{ 1646e41f4b71Sopenharmony_ci console.info("taskpool: execute task success") 1647e41f4b71Sopenharmony_ci}).catch((e:BusinessError)=>{ 1648e41f4b71Sopenharmony_ci console.error(`taskpool: error code: ${e.code}, error info: ${e.message}`); 1649e41f4b71Sopenharmony_ci}) 1650e41f4b71Sopenharmony_ci``` 1651e41f4b71Sopenharmony_ci 1652e41f4b71Sopenharmony_ci### onExecutionSucceeded<sup>12+</sup> 1653e41f4b71Sopenharmony_ci 1654e41f4b71Sopenharmony_cionExecutionSucceeded(callback: CallbackFunction): void 1655e41f4b71Sopenharmony_ci 1656e41f4b71Sopenharmony_ci注册一个回调函数,并在任务执行成功时调用它。需在任务执行前注册,否则会抛异常。 1657e41f4b71Sopenharmony_ci 1658e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1659e41f4b71Sopenharmony_ci 1660e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。 1661e41f4b71Sopenharmony_ci 1662e41f4b71Sopenharmony_ci**参数:** 1663e41f4b71Sopenharmony_ci 1664e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1665e41f4b71Sopenharmony_ci| ------ | ------ | ---- | ------------------ | 1666e41f4b71Sopenharmony_ci| callback | [CallbackFunction](#callbackfunction12) | 是 | 需注册的回调函数。 | 1667e41f4b71Sopenharmony_ci 1668e41f4b71Sopenharmony_ci**错误码:** 1669e41f4b71Sopenharmony_ci 1670e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 1671e41f4b71Sopenharmony_ci 1672e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 1673e41f4b71Sopenharmony_ci| -------- | ------------------------------ | 1674e41f4b71Sopenharmony_ci| 401 | The input parameters are invalid. | 1675e41f4b71Sopenharmony_ci| 10200034 | The executed task does not support the registration of listeners. | 1676e41f4b71Sopenharmony_ci 1677e41f4b71Sopenharmony_ci**示例:** 1678e41f4b71Sopenharmony_ci 1679e41f4b71Sopenharmony_ci```ts 1680e41f4b71Sopenharmony_ciimport { taskpool } from '@kit.ArkTS' 1681e41f4b71Sopenharmony_ci 1682e41f4b71Sopenharmony_ci@Concurrent 1683e41f4b71Sopenharmony_cifunction delay(args: number): number { 1684e41f4b71Sopenharmony_ci let t: number = Date.now(); 1685e41f4b71Sopenharmony_ci while ((Date.now() - t) < 1000) { 1686e41f4b71Sopenharmony_ci continue; 1687e41f4b71Sopenharmony_ci } 1688e41f4b71Sopenharmony_ci return args; 1689e41f4b71Sopenharmony_ci} 1690e41f4b71Sopenharmony_ci 1691e41f4b71Sopenharmony_cilet task: taskpool.Task = new taskpool.Task(delay, 1); 1692e41f4b71Sopenharmony_citask.onExecutionSucceeded(()=>{ 1693e41f4b71Sopenharmony_ci console.info("taskpool: onExecutionSucceeded") 1694e41f4b71Sopenharmony_ci}); 1695e41f4b71Sopenharmony_citaskpool.execute(task).then(()=> { 1696e41f4b71Sopenharmony_ci console.info("taskpool: execute task success") 1697e41f4b71Sopenharmony_ci}); 1698e41f4b71Sopenharmony_ci``` 1699e41f4b71Sopenharmony_ci 1700e41f4b71Sopenharmony_ci### isDone<sup>12+</sup> 1701e41f4b71Sopenharmony_ci 1702e41f4b71Sopenharmony_ciisDone(): boolean 1703e41f4b71Sopenharmony_ci 1704e41f4b71Sopenharmony_ci检查任务是否已完成。 1705e41f4b71Sopenharmony_ci 1706e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1707e41f4b71Sopenharmony_ci 1708e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。 1709e41f4b71Sopenharmony_ci 1710e41f4b71Sopenharmony_ci**返回值:** 1711e41f4b71Sopenharmony_ci 1712e41f4b71Sopenharmony_ci| 类型 | 说明 | 1713e41f4b71Sopenharmony_ci| ------- | ------------------------------------ | 1714e41f4b71Sopenharmony_ci| boolean | 任务执行完成返回true,任务未执行完成返回false。 | 1715e41f4b71Sopenharmony_ci 1716e41f4b71Sopenharmony_ci**示例:** 1717e41f4b71Sopenharmony_ci 1718e41f4b71Sopenharmony_ci```ts 1719e41f4b71Sopenharmony_ci@Concurrent 1720e41f4b71Sopenharmony_cifunction inspectStatus(arg: number): number { 1721e41f4b71Sopenharmony_ci // 2s sleep 1722e41f4b71Sopenharmony_ci let t: number = Date.now(); 1723e41f4b71Sopenharmony_ci while (Date.now() - t < 1000) { 1724e41f4b71Sopenharmony_ci continue; 1725e41f4b71Sopenharmony_ci } 1726e41f4b71Sopenharmony_ci return arg + 1; 1727e41f4b71Sopenharmony_ci} 1728e41f4b71Sopenharmony_ci 1729e41f4b71Sopenharmony_ciasync function taskpoolCancel(): Promise<void> { 1730e41f4b71Sopenharmony_ci let task: taskpool.Task = new taskpool.Task(inspectStatus, 100); // 100: test number 1731e41f4b71Sopenharmony_ci taskpool.execute(task).then((res: Object)=>{ 1732e41f4b71Sopenharmony_ci console.info("taskpool test result: " + res); 1733e41f4b71Sopenharmony_ci }).catch((err: string) => { 1734e41f4b71Sopenharmony_ci console.error("taskpool test occur error: " + err); 1735e41f4b71Sopenharmony_ci }); 1736e41f4b71Sopenharmony_ci 1737e41f4b71Sopenharmony_ci setTimeout(()=>{ 1738e41f4b71Sopenharmony_ci if (!task.isDone()) { 1739e41f4b71Sopenharmony_ci taskpool.cancel(task); 1740e41f4b71Sopenharmony_ci } 1741e41f4b71Sopenharmony_ci }, 3000); // 延时3s,确保任务已执行 1742e41f4b71Sopenharmony_ci} 1743e41f4b71Sopenharmony_ci 1744e41f4b71Sopenharmony_citaskpoolCancel(); 1745e41f4b71Sopenharmony_ci``` 1746e41f4b71Sopenharmony_ci 1747e41f4b71Sopenharmony_ci## CallbackFunction<sup>12+</sup> 1748e41f4b71Sopenharmony_ci 1749e41f4b71Sopenharmony_citype CallbackFunction = () => void 1750e41f4b71Sopenharmony_ci 1751e41f4b71Sopenharmony_ci注册的回调函数类型。 1752e41f4b71Sopenharmony_ci 1753e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1754e41f4b71Sopenharmony_ci 1755e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。 1756e41f4b71Sopenharmony_ci 1757e41f4b71Sopenharmony_ci 1758e41f4b71Sopenharmony_ci## CallbackFunctionWithError<sup>12+</sup> 1759e41f4b71Sopenharmony_ci 1760e41f4b71Sopenharmony_citype CallbackFunctionWithError = (e: Error) => void 1761e41f4b71Sopenharmony_ci 1762e41f4b71Sopenharmony_ci注册带有错误码的回调函数类型。 1763e41f4b71Sopenharmony_ci 1764e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1765e41f4b71Sopenharmony_ci 1766e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。 1767e41f4b71Sopenharmony_ci**参数:** 1768e41f4b71Sopenharmony_ci 1769e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1770e41f4b71Sopenharmony_ci| ------ | ------ | ---- | ------------------ | 1771e41f4b71Sopenharmony_ci| e | Error | 是 | 错误信息。 | 1772e41f4b71Sopenharmony_ci 1773e41f4b71Sopenharmony_ci 1774e41f4b71Sopenharmony_ci## LongTask<sup>12+</sup> 1775e41f4b71Sopenharmony_ci 1776e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1777e41f4b71Sopenharmony_ci 1778e41f4b71Sopenharmony_ci表示长时任务。LongTask继承自[Task](#task)。 1779e41f4b71Sopenharmony_ci长时任务不设置执行时间上限,长时间运行不会触发超时异常,但不支持在任务组(TaskGroup)执行和多次执行。 1780e41f4b71Sopenharmony_ci执行长时任务的线程一直存在,直到执行完成后调用[terminateTask](#taskpoolterminatetask12),该线程会在空闲时被回收。 1781e41f4b71Sopenharmony_ci 1782e41f4b71Sopenharmony_ci**示例:** 1783e41f4b71Sopenharmony_ci 1784e41f4b71Sopenharmony_ci```ts 1785e41f4b71Sopenharmony_ci@Concurrent 1786e41f4b71Sopenharmony_cifunction printArgs(args: string): string { 1787e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 1788e41f4b71Sopenharmony_ci return args; 1789e41f4b71Sopenharmony_ci} 1790e41f4b71Sopenharmony_ci 1791e41f4b71Sopenharmony_cilet task: taskpool.LongTask = new taskpool.LongTask(printArgs, "this is my first LongTask"); 1792e41f4b71Sopenharmony_ci``` 1793e41f4b71Sopenharmony_ci 1794e41f4b71Sopenharmony_ci 1795e41f4b71Sopenharmony_ci## GenericsTask<sup>13+</sup> 1796e41f4b71Sopenharmony_ci 1797e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1798e41f4b71Sopenharmony_ci 1799e41f4b71Sopenharmony_ci表示泛型任务。GenericsTask继承自[Task](#task)。 1800e41f4b71Sopenharmony_ci相比创建Task,创建GenericsTask可以在编译阶段完成对并发函数的传参和返回值类型的校验,其余行为与Task一致。 1801e41f4b71Sopenharmony_ci 1802e41f4b71Sopenharmony_ci### constructor<sup>13+</sup> 1803e41f4b71Sopenharmony_ci 1804e41f4b71Sopenharmony_ciconstructor(func: (...args: A) => R | Promise\<R>, ...args: A) 1805e41f4b71Sopenharmony_ci 1806e41f4b71Sopenharmony_ciGenericsTask的构造函数。 1807e41f4b71Sopenharmony_ci 1808e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1809e41f4b71Sopenharmony_ci 1810e41f4b71Sopenharmony_ci**原子化服务API**:从API version 13 开始,该接口支持在原子化服务中使用。 1811e41f4b71Sopenharmony_ci 1812e41f4b71Sopenharmony_ci**参数:** 1813e41f4b71Sopenharmony_ci 1814e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1815e41f4b71Sopenharmony_ci| ------ | --------- | ---- | -------------------------------------------------------------------- | 1816e41f4b71Sopenharmony_ci| func | (...args: A) => R \| Promise\<R> | 是 | 执行的逻辑需要传入函数,必须使用[@Concurrent装饰器](../../arkts-utils/taskpool-introduction.md#concurrent装饰器)装饰,支持的函数返回值类型请查[序列化支持类型](#序列化支持类型)。 | 1817e41f4b71Sopenharmony_ci| args | A | 否 | 任务执行传入函数的入参,支持的参数类型请查[序列化支持类型](#序列化支持类型)。默认值为undefined。 | 1818e41f4b71Sopenharmony_ci 1819e41f4b71Sopenharmony_ci**错误码:** 1820e41f4b71Sopenharmony_ci 1821e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 1822e41f4b71Sopenharmony_ci 1823e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 1824e41f4b71Sopenharmony_ci| -------- | --------------------------------------- | 1825e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1.Incorrect parameter types; 2.Parameter verification failed. | 1826e41f4b71Sopenharmony_ci| 10200014 | The function is not marked as concurrent. | 1827e41f4b71Sopenharmony_ci 1828e41f4b71Sopenharmony_ci**示例:** 1829e41f4b71Sopenharmony_ci 1830e41f4b71Sopenharmony_ci```ts 1831e41f4b71Sopenharmony_ci@Concurrent 1832e41f4b71Sopenharmony_cifunction printArgs(args: string): string { 1833e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 1834e41f4b71Sopenharmony_ci return args; 1835e41f4b71Sopenharmony_ci} 1836e41f4b71Sopenharmony_ci 1837e41f4b71Sopenharmony_ci@Concurrent 1838e41f4b71Sopenharmony_cifunction testWithThreeParams(a: number, b: string, c: number): string { 1839e41f4b71Sopenharmony_ci return b; 1840e41f4b71Sopenharmony_ci} 1841e41f4b71Sopenharmony_ci 1842e41f4b71Sopenharmony_ci@Concurrent 1843e41f4b71Sopenharmony_cifunction testWithArray(args: [number, string]): string { 1844e41f4b71Sopenharmony_ci return "success"; 1845e41f4b71Sopenharmony_ci} 1846e41f4b71Sopenharmony_ci 1847e41f4b71Sopenharmony_cilet task1: taskpool.Task = new taskpool.GenericsTask<[string], string>(printArgs, "this is my first LongTask"); 1848e41f4b71Sopenharmony_ci 1849e41f4b71Sopenharmony_cilet task2: taskpool.Task = new taskpool.GenericsTask<[number, string, number], string>(testWithThreeParams, 100, "test", 100); 1850e41f4b71Sopenharmony_ci 1851e41f4b71Sopenharmony_cilet task3: taskpool.Task = new taskpool.GenericsTask<[[number, string]], string>(testWithArray, [100, "test"]); 1852e41f4b71Sopenharmony_ci``` 1853e41f4b71Sopenharmony_ci 1854e41f4b71Sopenharmony_ci### constructor<sup>13+</sup> 1855e41f4b71Sopenharmony_ci 1856e41f4b71Sopenharmony_ciconstructor(name: string, func: (...args: A) => R | Promise\<R>, ...args: A) 1857e41f4b71Sopenharmony_ci 1858e41f4b71Sopenharmony_ciGenericsTask的构造函数,可以指定任务名称。 1859e41f4b71Sopenharmony_ci 1860e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1861e41f4b71Sopenharmony_ci 1862e41f4b71Sopenharmony_ci**原子化服务API**:从API version 13 开始,该接口支持在原子化服务中使用。 1863e41f4b71Sopenharmony_ci 1864e41f4b71Sopenharmony_ci**参数:** 1865e41f4b71Sopenharmony_ci 1866e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1867e41f4b71Sopenharmony_ci| ------ | -------- | ---- | ------------------------------------------------------------ | 1868e41f4b71Sopenharmony_ci| name | string | 是 | 泛型任务名称。 | 1869e41f4b71Sopenharmony_ci| func | (...args: A) => R \| Promise\<R> | 是 | 执行的逻辑需要传入函数,必须使用[@Concurrent装饰器](../../arkts-utils/taskpool-introduction.md#concurrent装饰器)装饰,支持的函数返回值类型请查[序列化支持类型](#序列化支持类型)。 | 1870e41f4b71Sopenharmony_ci| args | A | 否 | 任务执行传入函数的入参,支持的参数类型请查[序列化支持类型](#序列化支持类型)。默认值为undefined。 | 1871e41f4b71Sopenharmony_ci 1872e41f4b71Sopenharmony_ci**错误码:** 1873e41f4b71Sopenharmony_ci 1874e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 1875e41f4b71Sopenharmony_ci 1876e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 1877e41f4b71Sopenharmony_ci| -------- | --------------------------------------- | 1878e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1.Incorrect parameter types; 2.Parameter verification failed. | 1879e41f4b71Sopenharmony_ci| 10200014 | The function is not marked as concurrent. | 1880e41f4b71Sopenharmony_ci 1881e41f4b71Sopenharmony_ci**示例:** 1882e41f4b71Sopenharmony_ci 1883e41f4b71Sopenharmony_ci```ts 1884e41f4b71Sopenharmony_ci@Concurrent 1885e41f4b71Sopenharmony_cifunction printArgs(args: string): string { 1886e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 1887e41f4b71Sopenharmony_ci return args; 1888e41f4b71Sopenharmony_ci} 1889e41f4b71Sopenharmony_ci 1890e41f4b71Sopenharmony_cilet taskName: string = "taskName"; 1891e41f4b71Sopenharmony_cilet task: taskpool.Task = new taskpool.GenericsTask<[string], string>(taskName, printArgs, "this is my first Task"); 1892e41f4b71Sopenharmony_cilet name: string = task.name; 1893e41f4b71Sopenharmony_ci``` 1894e41f4b71Sopenharmony_ci 1895e41f4b71Sopenharmony_ci## TaskGroup<sup>10+</sup> 1896e41f4b71Sopenharmony_ci 1897e41f4b71Sopenharmony_ci表示任务组,一次执行一组任务,适用于执行一组有关联的任务。如果所有任务正常执行,异步执行完毕后返回所有任务结果的数组,数组中元素的顺序与[addTask](#addtask10-1)的顺序相同;如果任意任务失败,则会抛出对应异常。任务组可以多次执行,但执行后不能新增任务。使用[constructor](#constructor10)方法构造TaskGroup。 1898e41f4b71Sopenharmony_ci 1899e41f4b71Sopenharmony_ci### constructor<sup>10+</sup> 1900e41f4b71Sopenharmony_ci 1901e41f4b71Sopenharmony_ciconstructor() 1902e41f4b71Sopenharmony_ci 1903e41f4b71Sopenharmony_ciTaskGroup的构造函数。 1904e41f4b71Sopenharmony_ci 1905e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1906e41f4b71Sopenharmony_ci 1907e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 1908e41f4b71Sopenharmony_ci 1909e41f4b71Sopenharmony_ci**示例:** 1910e41f4b71Sopenharmony_ci 1911e41f4b71Sopenharmony_ci```ts 1912e41f4b71Sopenharmony_cilet taskGroup = new taskpool.TaskGroup(); 1913e41f4b71Sopenharmony_ci``` 1914e41f4b71Sopenharmony_ci 1915e41f4b71Sopenharmony_ci### constructor<sup>11+</sup> 1916e41f4b71Sopenharmony_ci 1917e41f4b71Sopenharmony_ciconstructor(name: string) 1918e41f4b71Sopenharmony_ci 1919e41f4b71Sopenharmony_ciTaskGroup的构造函数,可以指定任务组名称。 1920e41f4b71Sopenharmony_ci 1921e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1922e41f4b71Sopenharmony_ci 1923e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 1924e41f4b71Sopenharmony_ci 1925e41f4b71Sopenharmony_ci**参数:** 1926e41f4b71Sopenharmony_ci 1927e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1928e41f4b71Sopenharmony_ci| ------ | ------ | ---- | ------------ | 1929e41f4b71Sopenharmony_ci| name | string | 是 | 任务组名称。 | 1930e41f4b71Sopenharmony_ci 1931e41f4b71Sopenharmony_ci**错误码:** 1932e41f4b71Sopenharmony_ci 1933e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 1934e41f4b71Sopenharmony_ci 1935e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 1936e41f4b71Sopenharmony_ci| -------- | -------- | 1937e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 1938e41f4b71Sopenharmony_ci 1939e41f4b71Sopenharmony_ci**示例:** 1940e41f4b71Sopenharmony_ci 1941e41f4b71Sopenharmony_ci```ts 1942e41f4b71Sopenharmony_cilet taskGroupName: string = "groupName"; 1943e41f4b71Sopenharmony_cilet taskGroup: taskpool.TaskGroup = new taskpool.TaskGroup(taskGroupName); 1944e41f4b71Sopenharmony_cilet name: string = taskGroup.name; 1945e41f4b71Sopenharmony_ci``` 1946e41f4b71Sopenharmony_ci 1947e41f4b71Sopenharmony_ci### addTask<sup>10+</sup> 1948e41f4b71Sopenharmony_ci 1949e41f4b71Sopenharmony_ciaddTask(func: Function, ...args: Object[]): void 1950e41f4b71Sopenharmony_ci 1951e41f4b71Sopenharmony_ci将待执行的函数添加到任务组中。使用该方法前需要先构造TaskGroup。 1952e41f4b71Sopenharmony_ci 1953e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1954e41f4b71Sopenharmony_ci 1955e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 1956e41f4b71Sopenharmony_ci 1957e41f4b71Sopenharmony_ci**参数:** 1958e41f4b71Sopenharmony_ci 1959e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1960e41f4b71Sopenharmony_ci| ------ | --------- | ---- | ---------------------------------------------------------------------- | 1961e41f4b71Sopenharmony_ci| func | Function | 是 | 执行的逻辑需要传入函数,必须使用[@Concurrent装饰器](../../arkts-utils/taskpool-introduction.md#concurrent装饰器)装饰,支持的函数返回值类型请查[序列化支持类型](#序列化支持类型)。 | 1962e41f4b71Sopenharmony_ci| args | Object[] | 否 | 任务执行函数所需要的入参,支持的参数类型请查[序列化支持类型](#序列化支持类型)。默认值为undefined。 | 1963e41f4b71Sopenharmony_ci 1964e41f4b71Sopenharmony_ci**错误码:** 1965e41f4b71Sopenharmony_ci 1966e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 1967e41f4b71Sopenharmony_ci 1968e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 1969e41f4b71Sopenharmony_ci| -------- | --------------------------------------- | 1970e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 1971e41f4b71Sopenharmony_ci| 10200014 | The function is not marked as concurrent. | 1972e41f4b71Sopenharmony_ci 1973e41f4b71Sopenharmony_ci**示例:** 1974e41f4b71Sopenharmony_ci 1975e41f4b71Sopenharmony_ci```ts 1976e41f4b71Sopenharmony_ci@Concurrent 1977e41f4b71Sopenharmony_cifunction printArgs(args: number): number { 1978e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 1979e41f4b71Sopenharmony_ci return args; 1980e41f4b71Sopenharmony_ci} 1981e41f4b71Sopenharmony_ci 1982e41f4b71Sopenharmony_cilet taskGroup: taskpool.TaskGroup = new taskpool.TaskGroup(); 1983e41f4b71Sopenharmony_citaskGroup.addTask(printArgs, 100); // 100: test number 1984e41f4b71Sopenharmony_ci``` 1985e41f4b71Sopenharmony_ci 1986e41f4b71Sopenharmony_ci### addTask<sup>10+</sup> 1987e41f4b71Sopenharmony_ci 1988e41f4b71Sopenharmony_ciaddTask(task: Task): void 1989e41f4b71Sopenharmony_ci 1990e41f4b71Sopenharmony_ci将创建好的任务添加到任务组中。使用该方法前需要先构造TaskGroup。任务组不可以添加其他任务组任务、串行队列任务、有依赖关系的任务、长时任务、周期任务和已执行的任务。 1991e41f4b71Sopenharmony_ci 1992e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1993e41f4b71Sopenharmony_ci 1994e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 1995e41f4b71Sopenharmony_ci 1996e41f4b71Sopenharmony_ci**参数:** 1997e41f4b71Sopenharmony_ci 1998e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1999e41f4b71Sopenharmony_ci| -------- | --------------------- | ---- | ---------------------------------------- | 2000e41f4b71Sopenharmony_ci| task | [Task](#task) | 是 | 需要添加到任务组中的任务。 | 2001e41f4b71Sopenharmony_ci 2002e41f4b71Sopenharmony_ci**错误码:** 2003e41f4b71Sopenharmony_ci 2004e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 2005e41f4b71Sopenharmony_ci 2006e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 2007e41f4b71Sopenharmony_ci| -------- | --------------------------------------- | 2008e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 2009e41f4b71Sopenharmony_ci| 10200014 | The function is not marked as concurrent. | 2010e41f4b71Sopenharmony_ci| 10200051 | The periodic task cannot be executed again. | 2011e41f4b71Sopenharmony_ci 2012e41f4b71Sopenharmony_ci**示例:** 2013e41f4b71Sopenharmony_ci 2014e41f4b71Sopenharmony_ci```ts 2015e41f4b71Sopenharmony_ci@Concurrent 2016e41f4b71Sopenharmony_cifunction printArgs(args: number): number { 2017e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 2018e41f4b71Sopenharmony_ci return args; 2019e41f4b71Sopenharmony_ci} 2020e41f4b71Sopenharmony_ci 2021e41f4b71Sopenharmony_cilet taskGroup: taskpool.TaskGroup = new taskpool.TaskGroup(); 2022e41f4b71Sopenharmony_cilet task: taskpool.Task = new taskpool.Task(printArgs, 200); // 200: test number 2023e41f4b71Sopenharmony_citaskGroup.addTask(task); 2024e41f4b71Sopenharmony_ci``` 2025e41f4b71Sopenharmony_ci 2026e41f4b71Sopenharmony_ci### 属性 2027e41f4b71Sopenharmony_ci 2028e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 2029e41f4b71Sopenharmony_ci 2030e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 2031e41f4b71Sopenharmony_ci 2032e41f4b71Sopenharmony_ci| 名称 | 类型 | 可读 | 可写 | 说明 | 2033e41f4b71Sopenharmony_ci| ---- | ------ | ---- | ---- | ---------------------------- | 2034e41f4b71Sopenharmony_ci| name<sup>11+</sup> | string | 是 | 是 | 创建任务组时指定的任务组名称。 | 2035e41f4b71Sopenharmony_ci 2036e41f4b71Sopenharmony_ci## SequenceRunner <sup>11+</sup> 2037e41f4b71Sopenharmony_ci 2038e41f4b71Sopenharmony_ci表示串行队列的任务,用于执行一组需要串行执行的任务。使用[constructor](#constructor11-3)方法构造SequenceRunner。 2039e41f4b71Sopenharmony_ci 2040e41f4b71Sopenharmony_ci### constructor<sup>11+</sup> 2041e41f4b71Sopenharmony_ci 2042e41f4b71Sopenharmony_ciconstructor(priority?: Priority) 2043e41f4b71Sopenharmony_ci 2044e41f4b71Sopenharmony_ciSequenceRunner的构造函数。 2045e41f4b71Sopenharmony_ci 2046e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 2047e41f4b71Sopenharmony_ci 2048e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 2049e41f4b71Sopenharmony_ci 2050e41f4b71Sopenharmony_ci**参数:** 2051e41f4b71Sopenharmony_ci 2052e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 2053e41f4b71Sopenharmony_ci| -------- | --------------------- | ---- | ---------------------------------------------------------- | 2054e41f4b71Sopenharmony_ci| priority | [Priority](#priority) | 否 | 指定任务的优先级,该参数默认值为taskpool.Priority.MEDIUM。 | 2055e41f4b71Sopenharmony_ci 2056e41f4b71Sopenharmony_ci**错误码:** 2057e41f4b71Sopenharmony_ci 2058e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 2059e41f4b71Sopenharmony_ci 2060e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 2061e41f4b71Sopenharmony_ci| -------- | -------- | 2062e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Incorrect parameter types; 2. Parameter verification failed. | 2063e41f4b71Sopenharmony_ci 2064e41f4b71Sopenharmony_ci**示例:** 2065e41f4b71Sopenharmony_ci 2066e41f4b71Sopenharmony_ci```ts 2067e41f4b71Sopenharmony_cilet runner: taskpool.SequenceRunner = new taskpool.SequenceRunner(); 2068e41f4b71Sopenharmony_ci``` 2069e41f4b71Sopenharmony_ci 2070e41f4b71Sopenharmony_ci### constructor<sup>12+</sup> 2071e41f4b71Sopenharmony_ci 2072e41f4b71Sopenharmony_ciconstructor(name: string, priority?: Priority) 2073e41f4b71Sopenharmony_ci 2074e41f4b71Sopenharmony_ciSequenceRunner的构造函数。构造一个全局串行队列,如果名字相同,将返回相同的串行队列。 2075e41f4b71Sopenharmony_ci 2076e41f4b71Sopenharmony_ci> **说明:** 2077e41f4b71Sopenharmony_ci> 2078e41f4b71Sopenharmony_ci> - 不支持修改串行队列的优先级。 2079e41f4b71Sopenharmony_ci 2080e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 2081e41f4b71Sopenharmony_ci 2082e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 2083e41f4b71Sopenharmony_ci 2084e41f4b71Sopenharmony_ci**参数:** 2085e41f4b71Sopenharmony_ci 2086e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 2087e41f4b71Sopenharmony_ci| -------- | --------------------- | ---- | ---------------------------------------------------------- | 2088e41f4b71Sopenharmony_ci| name | string | 是 | 串行队列的名字。 | 2089e41f4b71Sopenharmony_ci| priority | [Priority](#priority) | 否 | 指定任务的优先级,该参数默认值为taskpool.Priority.MEDIUM。 | 2090e41f4b71Sopenharmony_ci 2091e41f4b71Sopenharmony_ci**错误码:** 2092e41f4b71Sopenharmony_ci 2093e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 2094e41f4b71Sopenharmony_ci 2095e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 2096e41f4b71Sopenharmony_ci| -------- | -------- | 2097e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2098e41f4b71Sopenharmony_ci 2099e41f4b71Sopenharmony_ci**示例:** 2100e41f4b71Sopenharmony_ci 2101e41f4b71Sopenharmony_ci```ts 2102e41f4b71Sopenharmony_cilet runner:taskpool.SequenceRunner = new taskpool.SequenceRunner("runner1", taskpool.Priority.LOW); 2103e41f4b71Sopenharmony_ci``` 2104e41f4b71Sopenharmony_ci 2105e41f4b71Sopenharmony_ci### execute<sup>11+</sup> 2106e41f4b71Sopenharmony_ci 2107e41f4b71Sopenharmony_ciexecute(task: Task): Promise\<Object> 2108e41f4b71Sopenharmony_ci 2109e41f4b71Sopenharmony_ci执行串行任务。使用该方法前需要先构造SequenceRunner。串行队列不可以执行任务组任务、其他串行队列任务、有依赖关系的任务和已执行的任务。 2110e41f4b71Sopenharmony_ci 2111e41f4b71Sopenharmony_ci> **说明:** 2112e41f4b71Sopenharmony_ci> 2113e41f4b71Sopenharmony_ci> - 不支持加入存在依赖的任务。 2114e41f4b71Sopenharmony_ci> - 前面的任务执行失败或取消不影响后续任务执行。 2115e41f4b71Sopenharmony_ci 2116e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 2117e41f4b71Sopenharmony_ci 2118e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 2119e41f4b71Sopenharmony_ci 2120e41f4b71Sopenharmony_ci**参数:** 2121e41f4b71Sopenharmony_ci 2122e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 2123e41f4b71Sopenharmony_ci| ------ | ------------- | ---- | -------------------------------- | 2124e41f4b71Sopenharmony_ci| task | [Task](#task) | 是 | 需要添加到串行任务队列中的任务。 | 2125e41f4b71Sopenharmony_ci 2126e41f4b71Sopenharmony_ci**返回值:** 2127e41f4b71Sopenharmony_ci 2128e41f4b71Sopenharmony_ci| 类型 | 说明 | 2129e41f4b71Sopenharmony_ci| ---------------- | --------------------------------- | 2130e41f4b71Sopenharmony_ci| Promise\<Object> | Promise对象,返回任务执行的结果。 | 2131e41f4b71Sopenharmony_ci 2132e41f4b71Sopenharmony_ci**错误码:** 2133e41f4b71Sopenharmony_ci 2134e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 2135e41f4b71Sopenharmony_ci 2136e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 2137e41f4b71Sopenharmony_ci| -------- | ------------------------------------------- | 2138e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. | 2139e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. | 2140e41f4b71Sopenharmony_ci| 10200025 | dependent task not allowed. | 2141e41f4b71Sopenharmony_ci| 10200051 | The periodic task cannot be executed again. | 2142e41f4b71Sopenharmony_ci 2143e41f4b71Sopenharmony_ci**示例:** 2144e41f4b71Sopenharmony_ci 2145e41f4b71Sopenharmony_ci```ts 2146e41f4b71Sopenharmony_ci@Concurrent 2147e41f4b71Sopenharmony_cifunction additionDelay(delay:number): void { 2148e41f4b71Sopenharmony_ci let start: number = new Date().getTime(); 2149e41f4b71Sopenharmony_ci while (new Date().getTime() - start < delay) { 2150e41f4b71Sopenharmony_ci continue; 2151e41f4b71Sopenharmony_ci } 2152e41f4b71Sopenharmony_ci} 2153e41f4b71Sopenharmony_ci@Concurrent 2154e41f4b71Sopenharmony_cifunction waitForRunner(finalString: string): string { 2155e41f4b71Sopenharmony_ci return finalString; 2156e41f4b71Sopenharmony_ci} 2157e41f4b71Sopenharmony_ciasync function seqRunner() 2158e41f4b71Sopenharmony_ci{ 2159e41f4b71Sopenharmony_ci let finalString:string = ""; 2160e41f4b71Sopenharmony_ci let task1:taskpool.Task = new taskpool.Task(additionDelay, 3000); 2161e41f4b71Sopenharmony_ci let task2:taskpool.Task = new taskpool.Task(additionDelay, 2000); 2162e41f4b71Sopenharmony_ci let task3:taskpool.Task = new taskpool.Task(additionDelay, 1000); 2163e41f4b71Sopenharmony_ci let task4:taskpool.Task = new taskpool.Task(waitForRunner, finalString); 2164e41f4b71Sopenharmony_ci 2165e41f4b71Sopenharmony_ci let runner:taskpool.SequenceRunner = new taskpool.SequenceRunner(); 2166e41f4b71Sopenharmony_ci runner.execute(task1).then(() => { 2167e41f4b71Sopenharmony_ci finalString += 'a'; 2168e41f4b71Sopenharmony_ci console.info("seqrunner: task1 done."); 2169e41f4b71Sopenharmony_ci }); 2170e41f4b71Sopenharmony_ci runner.execute(task2).then(() => { 2171e41f4b71Sopenharmony_ci finalString += 'b'; 2172e41f4b71Sopenharmony_ci console.info("seqrunner: task2 done"); 2173e41f4b71Sopenharmony_ci }); 2174e41f4b71Sopenharmony_ci runner.execute(task3).then(() => { 2175e41f4b71Sopenharmony_ci finalString += 'c'; 2176e41f4b71Sopenharmony_ci console.info("seqrunner: task3 done"); 2177e41f4b71Sopenharmony_ci }); 2178e41f4b71Sopenharmony_ci await runner.execute(task4); 2179e41f4b71Sopenharmony_ci console.info("seqrunner: task4 done, finalString is " + finalString); 2180e41f4b71Sopenharmony_ci} 2181e41f4b71Sopenharmony_ci``` 2182e41f4b71Sopenharmony_ci 2183e41f4b71Sopenharmony_ci## State<sup>10+</sup> 2184e41f4b71Sopenharmony_ci 2185e41f4b71Sopenharmony_ci表示任务(Task)状态的枚举。当任务创建成功后,调用execute,任务进入taskpool等待队列,状态设置为WAITING;任务从等待队列出来进入taskpool工作线程中,任务状态更新为RUNNING;当任务执行完成,返回结果后任务状态重置为WAITING;当主动cancel任务时,将任务状态更新为CANCELED。 2186e41f4b71Sopenharmony_ci 2187e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 2188e41f4b71Sopenharmony_ci 2189e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 2190e41f4b71Sopenharmony_ci 2191e41f4b71Sopenharmony_ci| 名称 | 值 | 说明 | 2192e41f4b71Sopenharmony_ci| --------- | -------- | ------------- | 2193e41f4b71Sopenharmony_ci| WAITING | 1 | 任务正在等待。 | 2194e41f4b71Sopenharmony_ci| RUNNING | 2 | 任务正在执行。 | 2195e41f4b71Sopenharmony_ci| CANCELED | 3 | 任务已被取消。 | 2196e41f4b71Sopenharmony_ci 2197e41f4b71Sopenharmony_ci 2198e41f4b71Sopenharmony_ci## TaskInfo<sup>10+</sup> 2199e41f4b71Sopenharmony_ci 2200e41f4b71Sopenharmony_ci任务的内部信息。 2201e41f4b71Sopenharmony_ci 2202e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 2203e41f4b71Sopenharmony_ci 2204e41f4b71Sopenharmony_ci### 属性 2205e41f4b71Sopenharmony_ci 2206e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 2207e41f4b71Sopenharmony_ci 2208e41f4b71Sopenharmony_ci| 名称 | 类型 | 可读 | 可写 | 说明 | 2209e41f4b71Sopenharmony_ci| -------- | ------------------ | ---- | ---- | ------------------------------------------------------------- | 2210e41f4b71Sopenharmony_ci| name<sup>12+</sup> | string | 是 | 否 | 任务的名字。<br/> **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 2211e41f4b71Sopenharmony_ci| taskId | number | 是 | 否 | 任务的ID。<br/> **原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 | 2212e41f4b71Sopenharmony_ci| state | [State](#state10) | 是 | 否 | 任务的状态。<br/> **原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 | 2213e41f4b71Sopenharmony_ci| duration | number | 是 | 否 | 任务执行至当前所用的时间,单位为ms。当返回为0时,表示任务未执行;返回为空时,表示没有任务执行。<br/> **原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 | 2214e41f4b71Sopenharmony_ci 2215e41f4b71Sopenharmony_ci## ThreadInfo<sup>10+</sup> 2216e41f4b71Sopenharmony_ci 2217e41f4b71Sopenharmony_ci工作线程的内部信息。 2218e41f4b71Sopenharmony_ci 2219e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 2220e41f4b71Sopenharmony_ci 2221e41f4b71Sopenharmony_ci### 属性 2222e41f4b71Sopenharmony_ci 2223e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 2224e41f4b71Sopenharmony_ci 2225e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 2226e41f4b71Sopenharmony_ci 2227e41f4b71Sopenharmony_ci| 名称 | 类型 | 可读 | 可写 | 说明 | 2228e41f4b71Sopenharmony_ci| -------- | ---------------------- | ---- | ---- | -------------------------------------------------------- | 2229e41f4b71Sopenharmony_ci| tid | number | 是 | 否 | 工作线程的标识符。返回为空时,代表没有任务执行。 | 2230e41f4b71Sopenharmony_ci| taskIds | number[] | 是 | 否 | 在当前线程上运行的任务id列表。返回为空时,代表没有任务执行。 | 2231e41f4b71Sopenharmony_ci| priority | [Priority](#priority) | 是 | 否 | 当前线程的优先级。返回为空时,代表没有任务执行。 | 2232e41f4b71Sopenharmony_ci 2233e41f4b71Sopenharmony_ci## TaskPoolInfo<sup>10+</sup> 2234e41f4b71Sopenharmony_ci 2235e41f4b71Sopenharmony_ci任务池的内部信息。 2236e41f4b71Sopenharmony_ci 2237e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 2238e41f4b71Sopenharmony_ci 2239e41f4b71Sopenharmony_ci### 属性 2240e41f4b71Sopenharmony_ci 2241e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 2242e41f4b71Sopenharmony_ci 2243e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 2244e41f4b71Sopenharmony_ci 2245e41f4b71Sopenharmony_ci| 名称 | 类型 | 可读 | 可写 | 说明 | 2246e41f4b71Sopenharmony_ci| ------------- | -------------------------------- | ---- | ---- | -------------------- | 2247e41f4b71Sopenharmony_ci| threadInfos | [ThreadInfo[]](#threadinfo10) | 是 | 否 | 工作线程的内部信息。 | 2248e41f4b71Sopenharmony_ci| taskInfos | [TaskInfo[]](#taskinfo10) | 是 | 否 | 任务的内部信息。 | 2249e41f4b71Sopenharmony_ci 2250e41f4b71Sopenharmony_ci 2251e41f4b71Sopenharmony_ci## 其他说明 2252e41f4b71Sopenharmony_ci 2253e41f4b71Sopenharmony_ci### 序列化支持类型 2254e41f4b71Sopenharmony_ci序列化支持类型包括:All Primitive Type(不包括symbol)、Date、String、RegExp、Array、Map、Set、Object、ArrayBuffer、TypedArray。详情可见[TaskPool和Worker支持的序列化类型](../../arkts-utils/interthread-communication-overview.md)。 2255e41f4b71Sopenharmony_ci 2256e41f4b71Sopenharmony_ci### 简单使用 2257e41f4b71Sopenharmony_ci 2258e41f4b71Sopenharmony_ci**示例一** 2259e41f4b71Sopenharmony_ci 2260e41f4b71Sopenharmony_ci```ts 2261e41f4b71Sopenharmony_ci// 支持普通函数、引用入参传递 2262e41f4b71Sopenharmony_ci@Concurrent 2263e41f4b71Sopenharmony_cifunction printArgs(args: string): string { 2264e41f4b71Sopenharmony_ci console.info("func: " + args); 2265e41f4b71Sopenharmony_ci return args; 2266e41f4b71Sopenharmony_ci} 2267e41f4b71Sopenharmony_ci 2268e41f4b71Sopenharmony_ciasync function taskpoolExecute(): Promise<void> { 2269e41f4b71Sopenharmony_ci // taskpool.execute(task) 2270e41f4b71Sopenharmony_ci let task: taskpool.Task = new taskpool.Task(printArgs, "create task, then execute"); 2271e41f4b71Sopenharmony_ci console.info("taskpool.execute(task) result: " + await taskpool.execute(task)); 2272e41f4b71Sopenharmony_ci // taskpool.execute(function) 2273e41f4b71Sopenharmony_ci console.info("taskpool.execute(function) result: " + await taskpool.execute(printArgs, "execute task by func")); 2274e41f4b71Sopenharmony_ci} 2275e41f4b71Sopenharmony_ci 2276e41f4b71Sopenharmony_citaskpoolExecute(); 2277e41f4b71Sopenharmony_ci``` 2278e41f4b71Sopenharmony_ci 2279e41f4b71Sopenharmony_ci**示例二** 2280e41f4b71Sopenharmony_ci 2281e41f4b71Sopenharmony_ci```ts 2282e41f4b71Sopenharmony_ci// b.ets 2283e41f4b71Sopenharmony_ciexport let c: string = "hello"; 2284e41f4b71Sopenharmony_ci``` 2285e41f4b71Sopenharmony_ci<!--code_no_check--> 2286e41f4b71Sopenharmony_ci```ts 2287e41f4b71Sopenharmony_ci// 引用import变量 2288e41f4b71Sopenharmony_ci// a.ets(与b.ets位于同一目录中) 2289e41f4b71Sopenharmony_ciimport { c } from "./b"; 2290e41f4b71Sopenharmony_ci 2291e41f4b71Sopenharmony_ci@Concurrent 2292e41f4b71Sopenharmony_cifunction printArgs(a: string): string { 2293e41f4b71Sopenharmony_ci console.info(a); 2294e41f4b71Sopenharmony_ci console.info(c); 2295e41f4b71Sopenharmony_ci return a; 2296e41f4b71Sopenharmony_ci} 2297e41f4b71Sopenharmony_ci 2298e41f4b71Sopenharmony_ciasync function taskpoolExecute(): Promise<void> { 2299e41f4b71Sopenharmony_ci // taskpool.execute(task) 2300e41f4b71Sopenharmony_ci let task: taskpool.Task = new taskpool.Task(printArgs, "create task, then execute"); 2301e41f4b71Sopenharmony_ci console.info("taskpool.execute(task) result: " + await taskpool.execute(task)); 2302e41f4b71Sopenharmony_ci 2303e41f4b71Sopenharmony_ci // taskpool.execute(function) 2304e41f4b71Sopenharmony_ci console.info("taskpool.execute(function) result: " + await taskpool.execute(printArgs, "execute task by func")); 2305e41f4b71Sopenharmony_ci} 2306e41f4b71Sopenharmony_ci 2307e41f4b71Sopenharmony_citaskpoolExecute(); 2308e41f4b71Sopenharmony_ci``` 2309e41f4b71Sopenharmony_ci 2310e41f4b71Sopenharmony_ci**示例三** 2311e41f4b71Sopenharmony_ci 2312e41f4b71Sopenharmony_ci```ts 2313e41f4b71Sopenharmony_ci// 支持async函数 2314e41f4b71Sopenharmony_ci@Concurrent 2315e41f4b71Sopenharmony_ciasync function delayExecute(): Promise<Object> { 2316e41f4b71Sopenharmony_ci let ret = await Promise.all<Object>([ 2317e41f4b71Sopenharmony_ci new Promise<Object>(resolve => setTimeout(resolve, 1000, "resolved")) 2318e41f4b71Sopenharmony_ci ]); 2319e41f4b71Sopenharmony_ci return ret; 2320e41f4b71Sopenharmony_ci} 2321e41f4b71Sopenharmony_ci 2322e41f4b71Sopenharmony_ciasync function taskpoolExecute(): Promise<void> { 2323e41f4b71Sopenharmony_ci taskpool.execute(delayExecute).then((result: Object) => { 2324e41f4b71Sopenharmony_ci console.info("taskPoolTest task result: " + result); 2325e41f4b71Sopenharmony_ci }).catch((err: string) => { 2326e41f4b71Sopenharmony_ci console.error("taskpool test occur error: " + err); 2327e41f4b71Sopenharmony_ci }); 2328e41f4b71Sopenharmony_ci} 2329e41f4b71Sopenharmony_ci 2330e41f4b71Sopenharmony_citaskpoolExecute(); 2331e41f4b71Sopenharmony_ci``` 2332e41f4b71Sopenharmony_ci 2333e41f4b71Sopenharmony_ci**示例四** 2334e41f4b71Sopenharmony_ci 2335e41f4b71Sopenharmony_ci```ts 2336e41f4b71Sopenharmony_ci// c.ets 2337e41f4b71Sopenharmony_ciimport { taskpool } from '@kit.ArkTS'; 2338e41f4b71Sopenharmony_ci 2339e41f4b71Sopenharmony_ci@Concurrent 2340e41f4b71Sopenharmony_cifunction strSort(inPutArr: Array<string>): Array<string> { 2341e41f4b71Sopenharmony_ci let newArr = inPutArr.sort(); 2342e41f4b71Sopenharmony_ci return newArr; 2343e41f4b71Sopenharmony_ci} 2344e41f4b71Sopenharmony_ci 2345e41f4b71Sopenharmony_ciexport async function func1(): Promise<void> { 2346e41f4b71Sopenharmony_ci console.info("taskpoolTest start"); 2347e41f4b71Sopenharmony_ci let strArray: Array<string> = ['c test string', 'b test string', 'a test string']; 2348e41f4b71Sopenharmony_ci let task: taskpool.Task = new taskpool.Task(strSort, strArray); 2349e41f4b71Sopenharmony_ci console.info("func1 result:" + await taskpool.execute(task)); 2350e41f4b71Sopenharmony_ci} 2351e41f4b71Sopenharmony_ci 2352e41f4b71Sopenharmony_ciexport async function func2(): Promise<void> { 2353e41f4b71Sopenharmony_ci console.info("taskpoolTest2 start"); 2354e41f4b71Sopenharmony_ci let strArray: Array<string> = ['c test string', 'b test string', 'a test string']; 2355e41f4b71Sopenharmony_ci taskpool.execute(strSort, strArray).then((result: Object) => { 2356e41f4b71Sopenharmony_ci console.info("func2 result: " + result); 2357e41f4b71Sopenharmony_ci }).catch((err: string) => { 2358e41f4b71Sopenharmony_ci console.error("taskpool test occur error: " + err); 2359e41f4b71Sopenharmony_ci }); 2360e41f4b71Sopenharmony_ci} 2361e41f4b71Sopenharmony_ci``` 2362e41f4b71Sopenharmony_ci<!--code_no_check--> 2363e41f4b71Sopenharmony_ci```ts 2364e41f4b71Sopenharmony_ci// index.ets 2365e41f4b71Sopenharmony_ciimport { func1, func2 } from "./c"; 2366e41f4b71Sopenharmony_ci 2367e41f4b71Sopenharmony_cifunc1(); 2368e41f4b71Sopenharmony_cifunc2(); 2369e41f4b71Sopenharmony_ci``` 2370e41f4b71Sopenharmony_ci 2371e41f4b71Sopenharmony_ci**示例五** 2372e41f4b71Sopenharmony_ci 2373e41f4b71Sopenharmony_ci```ts 2374e41f4b71Sopenharmony_ci// 任务取消成功 2375e41f4b71Sopenharmony_ci@Concurrent 2376e41f4b71Sopenharmony_cifunction inspectStatus(arg: number): number { 2377e41f4b71Sopenharmony_ci // 第一次检查任务是否已经取消并作出响应 2378e41f4b71Sopenharmony_ci if (taskpool.Task.isCanceled()) { 2379e41f4b71Sopenharmony_ci console.info("task has been canceled before 2s sleep."); 2380e41f4b71Sopenharmony_ci return arg + 2; 2381e41f4b71Sopenharmony_ci } 2382e41f4b71Sopenharmony_ci // 2s sleep 2383e41f4b71Sopenharmony_ci let t: number = Date.now(); 2384e41f4b71Sopenharmony_ci while (Date.now() - t < 2000) { 2385e41f4b71Sopenharmony_ci continue; 2386e41f4b71Sopenharmony_ci } 2387e41f4b71Sopenharmony_ci // 第二次检查任务是否已经取消并作出响应 2388e41f4b71Sopenharmony_ci if (taskpool.Task.isCanceled()) { 2389e41f4b71Sopenharmony_ci console.info("task has been canceled after 2s sleep."); 2390e41f4b71Sopenharmony_ci return arg + 3; 2391e41f4b71Sopenharmony_ci } 2392e41f4b71Sopenharmony_ci return arg + 1; 2393e41f4b71Sopenharmony_ci} 2394e41f4b71Sopenharmony_ci 2395e41f4b71Sopenharmony_ciasync function taskpoolCancel(): Promise<void> { 2396e41f4b71Sopenharmony_ci let task: taskpool.Task = new taskpool.Task(inspectStatus, 100); // 100: test number 2397e41f4b71Sopenharmony_ci taskpool.execute(task).then((res: Object) => { 2398e41f4b71Sopenharmony_ci console.info("taskpool test result: " + res); 2399e41f4b71Sopenharmony_ci }).catch((err: string) => { 2400e41f4b71Sopenharmony_ci console.error("taskpool test occur error: " + err); 2401e41f4b71Sopenharmony_ci }); 2402e41f4b71Sopenharmony_ci // 1s后取消task 2403e41f4b71Sopenharmony_ci setTimeout(() => { 2404e41f4b71Sopenharmony_ci try { 2405e41f4b71Sopenharmony_ci taskpool.cancel(task); 2406e41f4b71Sopenharmony_ci } catch (e) { 2407e41f4b71Sopenharmony_ci console.error(`taskpool: cancel error code: ${e.code}, info: ${e.message}`); 2408e41f4b71Sopenharmony_ci } 2409e41f4b71Sopenharmony_ci }, 1000); 2410e41f4b71Sopenharmony_ci} 2411e41f4b71Sopenharmony_ci 2412e41f4b71Sopenharmony_citaskpoolCancel(); 2413e41f4b71Sopenharmony_ci``` 2414e41f4b71Sopenharmony_ci 2415e41f4b71Sopenharmony_ci**示例六** 2416e41f4b71Sopenharmony_ci 2417e41f4b71Sopenharmony_ci```ts 2418e41f4b71Sopenharmony_ci// 已执行的任务取消失败 2419e41f4b71Sopenharmony_ci@Concurrent 2420e41f4b71Sopenharmony_cifunction inspectStatus(arg: number): number { 2421e41f4b71Sopenharmony_ci // 第一次检查任务是否已经取消并作出响应 2422e41f4b71Sopenharmony_ci if (taskpool.Task.isCanceled()) { 2423e41f4b71Sopenharmony_ci return arg + 2; 2424e41f4b71Sopenharmony_ci } 2425e41f4b71Sopenharmony_ci // 延时2s 2426e41f4b71Sopenharmony_ci let t: number = Date.now(); 2427e41f4b71Sopenharmony_ci while (Date.now() - t < 500) { 2428e41f4b71Sopenharmony_ci continue; 2429e41f4b71Sopenharmony_ci } 2430e41f4b71Sopenharmony_ci // 第二次检查任务是否已经取消并作出响应 2431e41f4b71Sopenharmony_ci if (taskpool.Task.isCanceled()) { 2432e41f4b71Sopenharmony_ci return arg + 3; 2433e41f4b71Sopenharmony_ci } 2434e41f4b71Sopenharmony_ci return arg + 1; 2435e41f4b71Sopenharmony_ci} 2436e41f4b71Sopenharmony_ci 2437e41f4b71Sopenharmony_ciasync function taskpoolCancel(): Promise<void> { 2438e41f4b71Sopenharmony_ci let task: taskpool.Task = new taskpool.Task(inspectStatus, 100); // 100: test number 2439e41f4b71Sopenharmony_ci taskpool.execute(task).then((res: Object) => { 2440e41f4b71Sopenharmony_ci console.info("taskpool test result: " + res); 2441e41f4b71Sopenharmony_ci }).catch((err: string) => { 2442e41f4b71Sopenharmony_ci console.error("taskpool test occur error: " + err); 2443e41f4b71Sopenharmony_ci }); 2444e41f4b71Sopenharmony_ci 2445e41f4b71Sopenharmony_ci setTimeout(() => { 2446e41f4b71Sopenharmony_ci try { 2447e41f4b71Sopenharmony_ci taskpool.cancel(task); // 任务已执行,取消失败 2448e41f4b71Sopenharmony_ci } catch (e) { 2449e41f4b71Sopenharmony_ci console.error(`taskpool: cancel error code: ${e.code}, info: ${e.message}`); 2450e41f4b71Sopenharmony_ci } 2451e41f4b71Sopenharmony_ci }, 3000); // 延时3s,确保任务已执行 2452e41f4b71Sopenharmony_ci} 2453e41f4b71Sopenharmony_ci 2454e41f4b71Sopenharmony_citaskpoolCancel(); 2455e41f4b71Sopenharmony_ci``` 2456e41f4b71Sopenharmony_ci 2457e41f4b71Sopenharmony_ci**示例七** 2458e41f4b71Sopenharmony_ci 2459e41f4b71Sopenharmony_ci```ts 2460e41f4b71Sopenharmony_ci// 待执行的任务组取消成功 2461e41f4b71Sopenharmony_ci@Concurrent 2462e41f4b71Sopenharmony_cifunction printArgs(args: number): number { 2463e41f4b71Sopenharmony_ci let t: number = Date.now(); 2464e41f4b71Sopenharmony_ci while (Date.now() - t < 1000) { 2465e41f4b71Sopenharmony_ci continue; 2466e41f4b71Sopenharmony_ci } 2467e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 2468e41f4b71Sopenharmony_ci return args; 2469e41f4b71Sopenharmony_ci} 2470e41f4b71Sopenharmony_ci 2471e41f4b71Sopenharmony_ciasync function taskpoolGroupCancelTest(): Promise<void> { 2472e41f4b71Sopenharmony_ci let taskGroup1: taskpool.TaskGroup = new taskpool.TaskGroup(); 2473e41f4b71Sopenharmony_ci taskGroup1.addTask(printArgs, 10); // 10: test number 2474e41f4b71Sopenharmony_ci taskGroup1.addTask(printArgs, 20); // 20: test number 2475e41f4b71Sopenharmony_ci taskGroup1.addTask(printArgs, 30); // 30: test number 2476e41f4b71Sopenharmony_ci let taskGroup2: taskpool.TaskGroup = new taskpool.TaskGroup(); 2477e41f4b71Sopenharmony_ci let task1: taskpool.Task = new taskpool.Task(printArgs, 100); // 100: test number 2478e41f4b71Sopenharmony_ci let task2: taskpool.Task = new taskpool.Task(printArgs, 200); // 200: test number 2479e41f4b71Sopenharmony_ci let task3: taskpool.Task = new taskpool.Task(printArgs, 300); // 300: test number 2480e41f4b71Sopenharmony_ci taskGroup2.addTask(task1); 2481e41f4b71Sopenharmony_ci taskGroup2.addTask(task2); 2482e41f4b71Sopenharmony_ci taskGroup2.addTask(task3); 2483e41f4b71Sopenharmony_ci taskpool.execute(taskGroup1).then((res: Array<Object>) => { 2484e41f4b71Sopenharmony_ci console.info("taskpool execute res is:" + res); 2485e41f4b71Sopenharmony_ci }).catch((e: string) => { 2486e41f4b71Sopenharmony_ci console.error("taskpool execute error is:" + e); 2487e41f4b71Sopenharmony_ci }); 2488e41f4b71Sopenharmony_ci taskpool.execute(taskGroup2).then((res: Array<Object>) => { 2489e41f4b71Sopenharmony_ci console.info("taskpool execute res is:" + res); 2490e41f4b71Sopenharmony_ci }).catch((e: string) => { 2491e41f4b71Sopenharmony_ci console.error("taskpool execute error is:" + e); 2492e41f4b71Sopenharmony_ci }); 2493e41f4b71Sopenharmony_ci 2494e41f4b71Sopenharmony_ci try { 2495e41f4b71Sopenharmony_ci taskpool.cancel(taskGroup2); 2496e41f4b71Sopenharmony_ci } catch (e) { 2497e41f4b71Sopenharmony_ci console.error(`taskpool: cancel error code: ${e.code}, info: ${e.message}`); 2498e41f4b71Sopenharmony_ci } 2499e41f4b71Sopenharmony_ci} 2500e41f4b71Sopenharmony_ci 2501e41f4b71Sopenharmony_citaskpoolGroupCancelTest() 2502e41f4b71Sopenharmony_ci``` 2503e41f4b71Sopenharmony_ci 2504e41f4b71Sopenharmony_ci**示例八** 2505e41f4b71Sopenharmony_ci 2506e41f4b71Sopenharmony_ci```ts 2507e41f4b71Sopenharmony_ci// 分别创建执行100个高、中、低优先级的任务,查看其各项信息 2508e41f4b71Sopenharmony_ci@Concurrent 2509e41f4b71Sopenharmony_cifunction delay(): void { 2510e41f4b71Sopenharmony_ci let start: number = new Date().getTime(); 2511e41f4b71Sopenharmony_ci while (new Date().getTime() - start < 500) { 2512e41f4b71Sopenharmony_ci continue; 2513e41f4b71Sopenharmony_ci } 2514e41f4b71Sopenharmony_ci} 2515e41f4b71Sopenharmony_ci 2516e41f4b71Sopenharmony_cilet highCount: number = 0; 2517e41f4b71Sopenharmony_cilet mediumCount: number = 0; 2518e41f4b71Sopenharmony_cilet lowCount: number = 0; 2519e41f4b71Sopenharmony_cilet allCount: number = 100; 2520e41f4b71Sopenharmony_cifor (let i = 0; i < allCount; i++) { 2521e41f4b71Sopenharmony_ci let task1: taskpool.Task = new taskpool.Task(delay); 2522e41f4b71Sopenharmony_ci let task2: taskpool.Task = new taskpool.Task(delay); 2523e41f4b71Sopenharmony_ci let task3: taskpool.Task = new taskpool.Task(delay); 2524e41f4b71Sopenharmony_ci taskpool.execute(task1, taskpool.Priority.LOW).then(() => { 2525e41f4b71Sopenharmony_ci lowCount++; 2526e41f4b71Sopenharmony_ci }).catch((e: string) => { 2527e41f4b71Sopenharmony_ci console.error("low task error: " + e); 2528e41f4b71Sopenharmony_ci }) 2529e41f4b71Sopenharmony_ci taskpool.execute(task2, taskpool.Priority.MEDIUM).then(() => { 2530e41f4b71Sopenharmony_ci mediumCount++; 2531e41f4b71Sopenharmony_ci }).catch((e: string) => { 2532e41f4b71Sopenharmony_ci console.error("medium task error: " + e); 2533e41f4b71Sopenharmony_ci }) 2534e41f4b71Sopenharmony_ci taskpool.execute(task3, taskpool.Priority.HIGH).then(() => { 2535e41f4b71Sopenharmony_ci highCount++; 2536e41f4b71Sopenharmony_ci }).catch((e: string) => { 2537e41f4b71Sopenharmony_ci console.error("high task error: " + e); 2538e41f4b71Sopenharmony_ci }) 2539e41f4b71Sopenharmony_ci} 2540e41f4b71Sopenharmony_cilet start: number = new Date().getTime(); 2541e41f4b71Sopenharmony_ciwhile (new Date().getTime() - start < 1000) { 2542e41f4b71Sopenharmony_ci continue; 2543e41f4b71Sopenharmony_ci} 2544e41f4b71Sopenharmony_cilet taskpoolInfo: taskpool.TaskPoolInfo = taskpool.getTaskPoolInfo(); 2545e41f4b71Sopenharmony_cilet tid: number = 0; 2546e41f4b71Sopenharmony_cilet taskIds: Array<number> = []; 2547e41f4b71Sopenharmony_cilet priority: number = 0; 2548e41f4b71Sopenharmony_cilet taskId: number = 0; 2549e41f4b71Sopenharmony_cilet state: number = 0; 2550e41f4b71Sopenharmony_cilet duration: number = 0; 2551e41f4b71Sopenharmony_cilet name: string = ""; 2552e41f4b71Sopenharmony_cilet threadIS = Array.from(taskpoolInfo.threadInfos) 2553e41f4b71Sopenharmony_cifor (let threadInfo of threadIS) { 2554e41f4b71Sopenharmony_ci tid = threadInfo.tid; 2555e41f4b71Sopenharmony_ci if (threadInfo.taskIds != undefined && threadInfo.priority != undefined) { 2556e41f4b71Sopenharmony_ci taskIds.length = threadInfo.taskIds.length; 2557e41f4b71Sopenharmony_ci priority = threadInfo.priority; 2558e41f4b71Sopenharmony_ci } 2559e41f4b71Sopenharmony_ci console.info("taskpool---tid is:" + tid + ", taskIds is:" + taskIds + ", priority is:" + priority); 2560e41f4b71Sopenharmony_ci} 2561e41f4b71Sopenharmony_cilet taskIS = Array.from(taskpoolInfo.taskInfos) 2562e41f4b71Sopenharmony_cifor (let taskInfo of taskIS) { 2563e41f4b71Sopenharmony_ci taskId = taskInfo.taskId; 2564e41f4b71Sopenharmony_ci state = taskInfo.state; 2565e41f4b71Sopenharmony_ci if (taskInfo.duration != undefined) { 2566e41f4b71Sopenharmony_ci duration = taskInfo.duration; 2567e41f4b71Sopenharmony_ci name = taskInfo.name; 2568e41f4b71Sopenharmony_ci } 2569e41f4b71Sopenharmony_ci console.info("taskpool---taskId is:" + taskId + ", state is:" + state + ", duration is:" + duration + ", name is:" + name); 2570e41f4b71Sopenharmony_ci} 2571e41f4b71Sopenharmony_ci```