1e41f4b71Sopenharmony_ci# @ohos.taskpool (Starting the Task Pool) 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ciThe task pool provides a multi-thread running environment for applications. It helps reduce resource consumption and improve system performance. It also frees you from caring about the lifecycle of thread instances. You can use the **TaskPool** APIs to create background tasks and perform operations on them, for example, executing or canceling a task. Theoretically, you can create an unlimited number of tasks, but this is not recommended for memory considerations. In addition, you are not advised performing blocking operations in a task, especially indefinite blocking. Long-time blocking operations occupy worker threads and may block other task scheduling, adversely affecting your application performance. 4e41f4b71Sopenharmony_ci 5e41f4b71Sopenharmony_ciYou can determine the execution sequence of tasks with the same priority. They are executed in the same sequence as you call the task execution APIs. The default task priority is **MEDIUM**. 6e41f4b71Sopenharmony_ci 7e41f4b71Sopenharmony_ciIf the number of tasks to be executed is greater than the number of worker threads in the task pool, the task pool scales out based on load balancing to minimize the waiting duration. Similarly, when the number of tasks to be executed falls below the number of worker threads, the task pool scales in to reduce the number of worker threads. 8e41f4b71Sopenharmony_ci 9e41f4b71Sopenharmony_ciThe **TaskPool** APIs return error codes in numeric format. For details about the error codes, see [Utils Error Codes](errorcode-utils.md). 10e41f4b71Sopenharmony_ci 11e41f4b71Sopenharmony_ciFor details about the precautions for using **TaskPool**, see [Precautions for TaskPool](../../arkts-utils/taskpool-introduction.md#precautions-for-taskpool). 12e41f4b71Sopenharmony_ci 13e41f4b71Sopenharmony_ci> **NOTE** 14e41f4b71Sopenharmony_ci> 15e41f4b71Sopenharmony_ci> The initial APIs of this module are supported since API version 9. Newly added APIs will be marked with a superscript to indicate their earliest API version. 16e41f4b71Sopenharmony_ci 17e41f4b71Sopenharmony_ci## Modules to Import 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_ciPlaces a function to be executed in the internal queue of the task pool. The function is not executed immediately. It waits to be distributed to the worker thread for execution. In this mode, the function cannot be canceled. 27e41f4b71Sopenharmony_ci 28e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 29e41f4b71Sopenharmony_ci 30e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 31e41f4b71Sopenharmony_ci 32e41f4b71Sopenharmony_ci**Parameters** 33e41f4b71Sopenharmony_ci 34e41f4b71Sopenharmony_ci| Name| Type | Mandatory| Description | 35e41f4b71Sopenharmony_ci| ------ | --------- | ---- | ---------------------------------------------------------------------- | 36e41f4b71Sopenharmony_ci| func | Function | Yes | Function to be executed. The function must be decorated using [@Concurrent decorator](../../arkts-utils/arkts-concurrent.md). For details about the supported return value types of the function, see [Sequenceable Data Types](#sequenceable-data-types). | 37e41f4b71Sopenharmony_ci| args | Object[] | No | Arguments of the function. For details about the supported parameter types, see [Sequenceable Data Types](#sequenceable-data-types). The default value is **undefined**.| 38e41f4b71Sopenharmony_ci 39e41f4b71Sopenharmony_ci**Return value** 40e41f4b71Sopenharmony_ci 41e41f4b71Sopenharmony_ci| Type | Description | 42e41f4b71Sopenharmony_ci| ----------------- | ------------------------------------ | 43e41f4b71Sopenharmony_ci| Promise\<Object> | Promise used to return an object that carries the function execution result.| 44e41f4b71Sopenharmony_ci 45e41f4b71Sopenharmony_ci**Error codes** 46e41f4b71Sopenharmony_ci 47e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 48e41f4b71Sopenharmony_ci 49e41f4b71Sopenharmony_ci| ID| Error Message | 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**Example** 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_ciVerifies the passed-in parameter types and return value type of a concurrent function, and places the function to execute in the internal queue of the task pool. 75e41f4b71Sopenharmony_ci 76e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 77e41f4b71Sopenharmony_ci 78e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 13. 79e41f4b71Sopenharmony_ci 80e41f4b71Sopenharmony_ci**Parameters** 81e41f4b71Sopenharmony_ci 82e41f4b71Sopenharmony_ci| Name| Type | Mandatory| Description | 83e41f4b71Sopenharmony_ci| ------ | --------- | ---- | ---------------------------------------------------------------------- | 84e41f4b71Sopenharmony_ci| func | (...args: A) => R \| Promise\<R> | Yes | Function to be executed. The function must be decorated using [@Concurrent decorator](../../arkts-utils/arkts-concurrent.md). For details about the supported return value types of the function, see [Sequenceable Data Types](#sequenceable-data-types). | 85e41f4b71Sopenharmony_ci| args | A | No | Arguments of the function. For details about the supported parameter types, see [Sequenceable Data Types](#sequenceable-data-types). The default value is **undefined**.| 86e41f4b71Sopenharmony_ci 87e41f4b71Sopenharmony_ci**Return value** 88e41f4b71Sopenharmony_ci 89e41f4b71Sopenharmony_ci| Type | Description | 90e41f4b71Sopenharmony_ci| ----------------- | ------------------------------------ | 91e41f4b71Sopenharmony_ci| Promise\<R> | Promise used to return an object that carries the function execution result.| 92e41f4b71Sopenharmony_ci 93e41f4b71Sopenharmony_ci**Error codes** 94e41f4b71Sopenharmony_ci 95e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 96e41f4b71Sopenharmony_ci 97e41f4b71Sopenharmony_ci| ID| Error Message | 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**Example** 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_ciPlaces a task in the internal queue of the task pool. The task is not executed immediately. It waits to be distributed to the worker thread for execution. In this mode, you can set the task priority and call **cancel()** to cancel the task. The task cannot be a task in a task group or queue. This API can be called only once for a continuous task, but multiple times for a non-continuous task. 137e41f4b71Sopenharmony_ci 138e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 139e41f4b71Sopenharmony_ci 140e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 141e41f4b71Sopenharmony_ci 142e41f4b71Sopenharmony_ci**Parameters** 143e41f4b71Sopenharmony_ci 144e41f4b71Sopenharmony_ci| Name | Type | Mandatory| Description | 145e41f4b71Sopenharmony_ci| -------- | --------------------- | ---- | ---------------------------------------- | 146e41f4b71Sopenharmony_ci| task | [Task](#task) | Yes | Task to be executed. | 147e41f4b71Sopenharmony_ci| priority | [Priority](#priority) | No | Priority of the task. The default value is **taskpool.Priority.MEDIUM**.| 148e41f4b71Sopenharmony_ci 149e41f4b71Sopenharmony_ci**Return value** 150e41f4b71Sopenharmony_ci 151e41f4b71Sopenharmony_ci| Type | Description | 152e41f4b71Sopenharmony_ci| ---------------- | ---------------- | 153e41f4b71Sopenharmony_ci| Promise\<Object> | Promise used to return an object that carries the function execution result.| 154e41f4b71Sopenharmony_ci 155e41f4b71Sopenharmony_ci**Error codes** 156e41f4b71Sopenharmony_ci 157e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 158e41f4b71Sopenharmony_ci 159e41f4b71Sopenharmony_ci| ID| Error Message | 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**Example** 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_ciVerifies the passed-in parameter types and return value type of a concurrent function, and places the generic task in the internal queue of the task pool. 195e41f4b71Sopenharmony_ci 196e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 197e41f4b71Sopenharmony_ci 198e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 13. 199e41f4b71Sopenharmony_ci 200e41f4b71Sopenharmony_ci**Parameters** 201e41f4b71Sopenharmony_ci 202e41f4b71Sopenharmony_ci| Name | Type | Mandatory| Description | 203e41f4b71Sopenharmony_ci| -------- | --------------------- | ---- | ---------------------------------------- | 204e41f4b71Sopenharmony_ci| task | [GenericsTask](#genericstask13) | Yes | Generic task to be executed. | 205e41f4b71Sopenharmony_ci| priority | [Priority](#priority) | No | Priority of the task. The default value is **taskpool.Priority.MEDIUM**.| 206e41f4b71Sopenharmony_ci 207e41f4b71Sopenharmony_ci**Return value** 208e41f4b71Sopenharmony_ci 209e41f4b71Sopenharmony_ci| Type | Description | 210e41f4b71Sopenharmony_ci| ---------------- | ---------------- | 211e41f4b71Sopenharmony_ci| Promise\<R> | Promise used to return an object that carries the function execution result.| 212e41f4b71Sopenharmony_ci 213e41f4b71Sopenharmony_ci**Error codes** 214e41f4b71Sopenharmony_ci 215e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 216e41f4b71Sopenharmony_ci 217e41f4b71Sopenharmony_ci| ID| Error Message | 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**Example** 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_ciPlaces a task group in the internal queue of the task pool. The tasks in the task group are not executed immediately. They wait to be distributed to the worker thread for execution. After all tasks in the task group are executed, a result array is returned. This API applies when you want to execute a group of associated tasks. 253e41f4b71Sopenharmony_ci 254e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 255e41f4b71Sopenharmony_ci 256e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 257e41f4b71Sopenharmony_ci 258e41f4b71Sopenharmony_ci**Parameters** 259e41f4b71Sopenharmony_ci 260e41f4b71Sopenharmony_ci| Name | Type | Mandatory| Description | 261e41f4b71Sopenharmony_ci| --------- | --------------------------- | ---- | -------------------------------------------------------------- | 262e41f4b71Sopenharmony_ci| group | [TaskGroup](#taskgroup10) | Yes | Task group to be executed. | 263e41f4b71Sopenharmony_ci| priority | [Priority](#priority) | No | Priority of the task group. The default value is **taskpool.Priority.MEDIUM**.| 264e41f4b71Sopenharmony_ci 265e41f4b71Sopenharmony_ci**Return value** 266e41f4b71Sopenharmony_ci 267e41f4b71Sopenharmony_ci| Type | Description | 268e41f4b71Sopenharmony_ci| ---------------- | ---------------------------------- | 269e41f4b71Sopenharmony_ci| Promise\<Object[]> | Promise used to return an object array that carries the function execution result.| 270e41f4b71Sopenharmony_ci 271e41f4b71Sopenharmony_ci**Error codes** 272e41f4b71Sopenharmony_ci 273e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 274e41f4b71Sopenharmony_ci 275e41f4b71Sopenharmony_ci| ID| Error Message | 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**Example** 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_ciExecutes a task after a given delay. In this mode, you can set the task priority and call **cancel()** to cancel the task. The task cannot be a task in a task group or queue, or a periodic task. This API can be called only once for a continuous task, but multiple times for a non-continuous task. 314e41f4b71Sopenharmony_ci 315e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 316e41f4b71Sopenharmony_ci 317e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 318e41f4b71Sopenharmony_ci 319e41f4b71Sopenharmony_ci**Parameters** 320e41f4b71Sopenharmony_ci 321e41f4b71Sopenharmony_ci| Name | Type | Mandatory| Description | 322e41f4b71Sopenharmony_ci| ----------- | ------------- | ---- | -------------------- | 323e41f4b71Sopenharmony_ci| delayTime | number | Yes | Delay, in ms. | 324e41f4b71Sopenharmony_ci| task | [Task](#task) | Yes | Task to be executed with a delay.| 325e41f4b71Sopenharmony_ci| priority | [Priority](#priority) | No | Priority of the task. The default value is **taskpool.Priority.MEDIUM**.| 326e41f4b71Sopenharmony_ci 327e41f4b71Sopenharmony_ci**Return value** 328e41f4b71Sopenharmony_ci 329e41f4b71Sopenharmony_ci| Type | Description | 330e41f4b71Sopenharmony_ci| ---------------- | ---------------------------------- | 331e41f4b71Sopenharmony_ci| Promise\<Object> | Promise used to return an object that carries the function execution result.| 332e41f4b71Sopenharmony_ci 333e41f4b71Sopenharmony_ci**Error codes** 334e41f4b71Sopenharmony_ci 335e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 336e41f4b71Sopenharmony_ci 337e41f4b71Sopenharmony_ci| ID | Error Message | 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**Example** 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_ciVerifies the passed-in parameter types and return value type of a concurrent function, and executes the generic task with a delay. 372e41f4b71Sopenharmony_ci 373e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 374e41f4b71Sopenharmony_ci 375e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 13. 376e41f4b71Sopenharmony_ci 377e41f4b71Sopenharmony_ci**Parameters** 378e41f4b71Sopenharmony_ci 379e41f4b71Sopenharmony_ci| Name | Type | Mandatory| Description | 380e41f4b71Sopenharmony_ci| ----------- | ------------- | ---- | -------------------- | 381e41f4b71Sopenharmony_ci| delayTime | number | Yes | Delay, in ms. | 382e41f4b71Sopenharmony_ci| task | [GenericsTask](#genericstask13) | Yes | Generic task to be executed with a delay.| 383e41f4b71Sopenharmony_ci| priority | [Priority](#priority) | No | Priority of the task. The default value is **taskpool.Priority.MEDIUM**.| 384e41f4b71Sopenharmony_ci 385e41f4b71Sopenharmony_ci**Return value** 386e41f4b71Sopenharmony_ci 387e41f4b71Sopenharmony_ci| Type | Description | 388e41f4b71Sopenharmony_ci| ---------------- | ---------------------------------- | 389e41f4b71Sopenharmony_ci| Promise\<R> | Promise used to return an object that carries the function execution result.| 390e41f4b71Sopenharmony_ci 391e41f4b71Sopenharmony_ci**Error codes** 392e41f4b71Sopenharmony_ci 393e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 394e41f4b71Sopenharmony_ci 395e41f4b71Sopenharmony_ci| ID | Error Message | 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**Example** 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_ciExecutes a task periodically. 427e41f4b71Sopenharmony_ci 428e41f4b71Sopenharmony_ciIn this execution mode, you can set the task priority and call **cancel()** to cancel the execution. 429e41f4b71Sopenharmony_ci 430e41f4b71Sopenharmony_ciA periodic task cannot be a task in a task group or queue. It cannot call **execute()** again or have a dependency relationship. 431e41f4b71Sopenharmony_ci 432e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 433e41f4b71Sopenharmony_ci 434e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 12. 435e41f4b71Sopenharmony_ci 436e41f4b71Sopenharmony_ci**Parameters** 437e41f4b71Sopenharmony_ci 438e41f4b71Sopenharmony_ci| Name | Type | Mandatory | Description | 439e41f4b71Sopenharmony_ci| ----------- | ------------- | ----- | -------------------- | 440e41f4b71Sopenharmony_ci| period | number | Yes | Execution period, in ms. | 441e41f4b71Sopenharmony_ci| task | [Task](#task) | Yes | Task to be executed.| 442e41f4b71Sopenharmony_ci| priority | [Priority](#priority) | No | Priority of the task. The default value is **taskpool.Priority.MEDIUM**.| 443e41f4b71Sopenharmony_ci 444e41f4b71Sopenharmony_ci 445e41f4b71Sopenharmony_ci**Error codes** 446e41f4b71Sopenharmony_ci 447e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 448e41f4b71Sopenharmony_ci 449e41f4b71Sopenharmony_ci| ID | Error Message | 450e41f4b71Sopenharmony_ci| ---------- | -------------------------------- | 451e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 452e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. | 453e41f4b71Sopenharmony_ci| 10200014 | The function is not marked as concurrent. | 454e41f4b71Sopenharmony_ci| 10200028 | The period is less than zero. | 455e41f4b71Sopenharmony_ci| 10200050 | The concurrent task has been executed and cannot be executed periodically. | 456e41f4b71Sopenharmony_ci 457e41f4b71Sopenharmony_ci 458e41f4b71Sopenharmony_ci**Example** 459e41f4b71Sopenharmony_ci 460e41f4b71Sopenharmony_ci```ts 461e41f4b71Sopenharmony_ci@Concurrent 462e41f4b71Sopenharmony_cifunction printArgs(args: number): void { 463e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 464e41f4b71Sopenharmony_ci} 465e41f4b71Sopenharmony_ci 466e41f4b71Sopenharmony_ci@Concurrent 467e41f4b71Sopenharmony_cifunction testExecutePeriodically(args: number): void { 468e41f4b71Sopenharmony_ci let t = Date.now(); 469e41f4b71Sopenharmony_ci while ((Date.now() - t) < args) { 470e41f4b71Sopenharmony_ci continue; 471e41f4b71Sopenharmony_ci } 472e41f4b71Sopenharmony_ci taskpool.Task.sendData(args); // Send a message to the main thread. 473e41f4b71Sopenharmony_ci} 474e41f4b71Sopenharmony_ci 475e41f4b71Sopenharmony_cifunction printResult(data: number): void { 476e41f4b71Sopenharmony_ci console.info("taskpool: data is: " + data); 477e41f4b71Sopenharmony_ci} 478e41f4b71Sopenharmony_ci 479e41f4b71Sopenharmony_cifunction taskpoolTest() { 480e41f4b71Sopenharmony_ci try { 481e41f4b71Sopenharmony_ci let task: taskpool.Task = new taskpool.Task(printArgs, 100); // 100: test number 482e41f4b71Sopenharmony_ci taskpool.executePeriodically(1000, task); // 1000: period is 1000ms 483e41f4b71Sopenharmony_ci } catch (e) { 484e41f4b71Sopenharmony_ci console.error(`taskpool execute-1: Code: ${e.code}, message: ${e.message}`); 485e41f4b71Sopenharmony_ci } 486e41f4b71Sopenharmony_ci 487e41f4b71Sopenharmony_ci try { 488e41f4b71Sopenharmony_ci let periodicTask: taskpool.Task = new taskpool.Task(testExecutePeriodically, 200); // 200: test number 489e41f4b71Sopenharmony_ci periodicTask.onReceiveData(printResult); 490e41f4b71Sopenharmony_ci taskpool.executePeriodically(1000, periodicTask); // 1000: period is 1000ms 491e41f4b71Sopenharmony_ci } catch (e) { 492e41f4b71Sopenharmony_ci console.error(`taskpool execute-2: Code: ${e.code}, message: ${e.message}`); 493e41f4b71Sopenharmony_ci } 494e41f4b71Sopenharmony_ci} 495e41f4b71Sopenharmony_ci 496e41f4b71Sopenharmony_citaskpoolTest(); 497e41f4b71Sopenharmony_ci``` 498e41f4b71Sopenharmony_ci 499e41f4b71Sopenharmony_ci 500e41f4b71Sopenharmony_ci## taskpool.executePeriodically<sup>13+</sup> 501e41f4b71Sopenharmony_ci 502e41f4b71Sopenharmony_ciexecutePeriodically<A extends Array\<Object>, R>(period: number, task: GenericsTask\<A, R>, priority?: Priority): void 503e41f4b71Sopenharmony_ci 504e41f4b71Sopenharmony_ciVerifies the passed-in parameter types and return value type of a concurrent function, and executes the generic task periodically at an interval specified by **period**. 505e41f4b71Sopenharmony_ci 506e41f4b71Sopenharmony_ci 507e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 508e41f4b71Sopenharmony_ci 509e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 13. 510e41f4b71Sopenharmony_ci 511e41f4b71Sopenharmony_ci**Parameters** 512e41f4b71Sopenharmony_ci 513e41f4b71Sopenharmony_ci| Name | Type | Mandatory | Description | 514e41f4b71Sopenharmony_ci| ----------- | ------------- | ----- | -------------------- | 515e41f4b71Sopenharmony_ci| period | number | Yes | Execution period, in ms. | 516e41f4b71Sopenharmony_ci| task | [GenericsTask](#genericstask13) | Yes | Generic task to be executed periodically.| 517e41f4b71Sopenharmony_ci| priority | [Priority](#priority) | No | Priority of the task. The default value is **taskpool.Priority.MEDIUM**.| 518e41f4b71Sopenharmony_ci 519e41f4b71Sopenharmony_ci 520e41f4b71Sopenharmony_ci**Error codes** 521e41f4b71Sopenharmony_ci 522e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 523e41f4b71Sopenharmony_ci 524e41f4b71Sopenharmony_ci| ID | Error Message | 525e41f4b71Sopenharmony_ci| ---------- | -------------------------------- | 526e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1.Incorrect parameter types; 2.Parameter verification failed. | 527e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. | 528e41f4b71Sopenharmony_ci| 10200014 | The function is not marked as concurrent. | 529e41f4b71Sopenharmony_ci| 10200028 | The period is less than zero. | 530e41f4b71Sopenharmony_ci| 10200050 | The concurrent task has been executed and cannot be executed periodically. | 531e41f4b71Sopenharmony_ci 532e41f4b71Sopenharmony_ci 533e41f4b71Sopenharmony_ci**Example** 534e41f4b71Sopenharmony_ci 535e41f4b71Sopenharmony_ci```ts 536e41f4b71Sopenharmony_ci@Concurrent 537e41f4b71Sopenharmony_cifunction printArgs(args: number): void { 538e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 539e41f4b71Sopenharmony_ci} 540e41f4b71Sopenharmony_ci 541e41f4b71Sopenharmony_ci@Concurrent 542e41f4b71Sopenharmony_cifunction testExecutePeriodically(args: number): void { 543e41f4b71Sopenharmony_ci let t = Date.now(); 544e41f4b71Sopenharmony_ci while ((Date.now() - t) < args) { 545e41f4b71Sopenharmony_ci continue; 546e41f4b71Sopenharmony_ci } 547e41f4b71Sopenharmony_ci taskpool.Task.sendData(args); // Send a message to the main thread. 548e41f4b71Sopenharmony_ci} 549e41f4b71Sopenharmony_ci 550e41f4b71Sopenharmony_cifunction printResult(data: number): void { 551e41f4b71Sopenharmony_ci console.info("taskpool: data is: " + data); 552e41f4b71Sopenharmony_ci} 553e41f4b71Sopenharmony_ci 554e41f4b71Sopenharmony_cifunction taskpoolTest() { 555e41f4b71Sopenharmony_ci try { 556e41f4b71Sopenharmony_ci let task: taskpool.Task = new taskpool.GenericsTask<[number], void>(printArgs, 100); // 100: test number 557e41f4b71Sopenharmony_ci taskpool.executePeriodically<[number], void>(1000, task); // 1000: period is 1000ms 558e41f4b71Sopenharmony_ci } catch (e) { 559e41f4b71Sopenharmony_ci console.error(`taskpool execute-1: Code: ${e.code}, message: ${e.message}`); 560e41f4b71Sopenharmony_ci } 561e41f4b71Sopenharmony_ci 562e41f4b71Sopenharmony_ci try { 563e41f4b71Sopenharmony_ci let periodicTask: taskpool.Task = new taskpool.GenericsTask<[number], void>(testExecutePeriodically, 200); // 200: test number 564e41f4b71Sopenharmony_ci periodicTask.onReceiveData(printResult); 565e41f4b71Sopenharmony_ci taskpool.executePeriodically<[number], void>(1000, periodicTask); // 1000: period is 1000ms 566e41f4b71Sopenharmony_ci } catch (e) { 567e41f4b71Sopenharmony_ci console.error(`taskpool execute-2: Code: ${e.code}, message: ${e.message}`); 568e41f4b71Sopenharmony_ci } 569e41f4b71Sopenharmony_ci} 570e41f4b71Sopenharmony_ci 571e41f4b71Sopenharmony_citaskpoolTest(); 572e41f4b71Sopenharmony_ci``` 573e41f4b71Sopenharmony_ci 574e41f4b71Sopenharmony_ci 575e41f4b71Sopenharmony_ci## taskpool.cancel 576e41f4b71Sopenharmony_ci 577e41f4b71Sopenharmony_cicancel(task: Task): void 578e41f4b71Sopenharmony_ci 579e41f4b71Sopenharmony_ciCancels a task in the task pool. If the task is in the internal queue of the task pool, the task will not be executed after being canceled, and **undefined** is returned. If the task has been distributed to the worker thread of the task pool, canceling the task does not affect the task execution, and the execution result is returned in the catch branch. You can use **isCanceled()** to check the task cancellation status. In other words, **taskpool.cancel** takes effect before **taskpool.execute** or **taskpool.executeDelayed** is called. 580e41f4b71Sopenharmony_ci 581e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 582e41f4b71Sopenharmony_ci 583e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 584e41f4b71Sopenharmony_ci 585e41f4b71Sopenharmony_ci**Parameters** 586e41f4b71Sopenharmony_ci 587e41f4b71Sopenharmony_ci| Name| Type | Mandatory| Description | 588e41f4b71Sopenharmony_ci| ------ | ------------- | ---- | -------------------- | 589e41f4b71Sopenharmony_ci| task | [Task](#task) | Yes | Task to cancel.| 590e41f4b71Sopenharmony_ci 591e41f4b71Sopenharmony_ci**Error codes** 592e41f4b71Sopenharmony_ci 593e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 594e41f4b71Sopenharmony_ci 595e41f4b71Sopenharmony_ci| ID| Error Message | 596e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | 597e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 598e41f4b71Sopenharmony_ci| 10200015 | The task to cancel does not exist. | 599e41f4b71Sopenharmony_ci 600e41f4b71Sopenharmony_ciSince API version 10, error code 10200016 is not reported when this API is called. 601e41f4b71Sopenharmony_ci 602e41f4b71Sopenharmony_ci**Example of canceling an ongoing task** 603e41f4b71Sopenharmony_ci 604e41f4b71Sopenharmony_ci```ts 605e41f4b71Sopenharmony_ci@Concurrent 606e41f4b71Sopenharmony_cifunction inspectStatus(arg: number): number { 607e41f4b71Sopenharmony_ci // Check whether the task has been canceled and respond accordingly. 608e41f4b71Sopenharmony_ci if (taskpool.Task.isCanceled()) { 609e41f4b71Sopenharmony_ci console.info("task has been canceled before 2s sleep."); 610e41f4b71Sopenharmony_ci return arg + 2; 611e41f4b71Sopenharmony_ci } 612e41f4b71Sopenharmony_ci // 2s sleep 613e41f4b71Sopenharmony_ci let t: number = Date.now(); 614e41f4b71Sopenharmony_ci while (Date.now() - t < 2000) { 615e41f4b71Sopenharmony_ci continue; 616e41f4b71Sopenharmony_ci } 617e41f4b71Sopenharmony_ci // Check again whether the task has been canceled and respond accordingly. 618e41f4b71Sopenharmony_ci if (taskpool.Task.isCanceled()) { 619e41f4b71Sopenharmony_ci console.info("task has been canceled after 2s sleep."); 620e41f4b71Sopenharmony_ci return arg + 3; 621e41f4b71Sopenharmony_ci } 622e41f4b71Sopenharmony_ci return arg + 1; 623e41f4b71Sopenharmony_ci} 624e41f4b71Sopenharmony_ci 625e41f4b71Sopenharmony_cifunction concurrentFunc() { 626e41f4b71Sopenharmony_ci let task1: taskpool.Task = new taskpool.Task(inspectStatus, 100); // 100: test number 627e41f4b71Sopenharmony_ci let task2: taskpool.Task = new taskpool.Task(inspectStatus, 200); // 200: test number 628e41f4b71Sopenharmony_ci let task3: taskpool.Task = new taskpool.Task(inspectStatus, 300); // 300: test number 629e41f4b71Sopenharmony_ci let task4: taskpool.Task = new taskpool.Task(inspectStatus, 400); // 400: test number 630e41f4b71Sopenharmony_ci let task5: taskpool.Task = new taskpool.Task(inspectStatus, 500); // 500: test number 631e41f4b71Sopenharmony_ci let task6: taskpool.Task = new taskpool.Task(inspectStatus, 600); // 600: test number 632e41f4b71Sopenharmony_ci taskpool.execute(task1).then((res: Object)=>{ 633e41f4b71Sopenharmony_ci console.info("taskpool test result: " + res); 634e41f4b71Sopenharmony_ci }); 635e41f4b71Sopenharmony_ci taskpool.execute(task2); 636e41f4b71Sopenharmony_ci taskpool.execute(task3); 637e41f4b71Sopenharmony_ci taskpool.execute(task4); 638e41f4b71Sopenharmony_ci taskpool.execute(task5); 639e41f4b71Sopenharmony_ci taskpool.execute(task6); 640e41f4b71Sopenharmony_ci // Cancel the task 1s later. 641e41f4b71Sopenharmony_ci setTimeout(()=>{ 642e41f4b71Sopenharmony_ci try { 643e41f4b71Sopenharmony_ci taskpool.cancel(task1); 644e41f4b71Sopenharmony_ci } catch (e) { 645e41f4b71Sopenharmony_ci console.error(`taskpool: cancel error code: ${e.code}, info: ${e.message}`); 646e41f4b71Sopenharmony_ci } 647e41f4b71Sopenharmony_ci }, 1000); 648e41f4b71Sopenharmony_ci} 649e41f4b71Sopenharmony_ci 650e41f4b71Sopenharmony_ciconcurrentFunc(); 651e41f4b71Sopenharmony_ci``` 652e41f4b71Sopenharmony_ci 653e41f4b71Sopenharmony_ci## taskpool.cancel<sup>10+</sup> 654e41f4b71Sopenharmony_ci 655e41f4b71Sopenharmony_cicancel(group: TaskGroup): void 656e41f4b71Sopenharmony_ci 657e41f4b71Sopenharmony_ciCancels a task group in the task pool. If a task group is canceled before all the tasks in it are finished, **undefined** is returned. 658e41f4b71Sopenharmony_ci 659e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 660e41f4b71Sopenharmony_ci 661e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 662e41f4b71Sopenharmony_ci 663e41f4b71Sopenharmony_ci**Parameters** 664e41f4b71Sopenharmony_ci 665e41f4b71Sopenharmony_ci| Name | Type | Mandatory| Description | 666e41f4b71Sopenharmony_ci| ------- | ----------------------- | ---- | -------------------- | 667e41f4b71Sopenharmony_ci| group | [TaskGroup](#taskgroup10) | Yes | Task group to cancel.| 668e41f4b71Sopenharmony_ci 669e41f4b71Sopenharmony_ci**Error codes** 670e41f4b71Sopenharmony_ci 671e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 672e41f4b71Sopenharmony_ci 673e41f4b71Sopenharmony_ci| ID| Error Message | 674e41f4b71Sopenharmony_ci| -------- | ------------------------------------------------------- | 675e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 676e41f4b71Sopenharmony_ci| 10200018 | The task group to cancel does not exist. | 677e41f4b71Sopenharmony_ci 678e41f4b71Sopenharmony_ci**Example** 679e41f4b71Sopenharmony_ci 680e41f4b71Sopenharmony_ci```ts 681e41f4b71Sopenharmony_ci@Concurrent 682e41f4b71Sopenharmony_cifunction printArgs(args: number): number { 683e41f4b71Sopenharmony_ci let t: number = Date.now(); 684e41f4b71Sopenharmony_ci while (Date.now() - t < 2000) { 685e41f4b71Sopenharmony_ci continue; 686e41f4b71Sopenharmony_ci } 687e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 688e41f4b71Sopenharmony_ci return args; 689e41f4b71Sopenharmony_ci} 690e41f4b71Sopenharmony_ci 691e41f4b71Sopenharmony_cifunction concurrentFunc() { 692e41f4b71Sopenharmony_ci let taskGroup1: taskpool.TaskGroup = new taskpool.TaskGroup(); 693e41f4b71Sopenharmony_ci taskGroup1.addTask(printArgs, 10); // 10: test number 694e41f4b71Sopenharmony_ci let taskGroup2: taskpool.TaskGroup = new taskpool.TaskGroup(); 695e41f4b71Sopenharmony_ci taskGroup2.addTask(printArgs, 100); // 100: test number 696e41f4b71Sopenharmony_ci taskpool.execute(taskGroup1).then((res: Array<Object>)=>{ 697e41f4b71Sopenharmony_ci console.info("taskGroup1 res is:" + res); 698e41f4b71Sopenharmony_ci }); 699e41f4b71Sopenharmony_ci taskpool.execute(taskGroup2).then((res: Array<Object>)=>{ 700e41f4b71Sopenharmony_ci console.info("taskGroup2 res is:" + res); 701e41f4b71Sopenharmony_ci }); 702e41f4b71Sopenharmony_ci setTimeout(()=>{ 703e41f4b71Sopenharmony_ci try { 704e41f4b71Sopenharmony_ci taskpool.cancel(taskGroup2); 705e41f4b71Sopenharmony_ci } catch (e) { 706e41f4b71Sopenharmony_ci console.error(`taskpool: cancel error code: ${e.code}, info: ${e.message}`); 707e41f4b71Sopenharmony_ci } 708e41f4b71Sopenharmony_ci }, 1000); 709e41f4b71Sopenharmony_ci} 710e41f4b71Sopenharmony_ci 711e41f4b71Sopenharmony_ciconcurrentFunc(); 712e41f4b71Sopenharmony_ci``` 713e41f4b71Sopenharmony_ci 714e41f4b71Sopenharmony_ci## taskpool.terminateTask<sup>12+</sup> 715e41f4b71Sopenharmony_ci 716e41f4b71Sopenharmony_citerminateTask(longTask: LongTask): void 717e41f4b71Sopenharmony_ci 718e41f4b71Sopenharmony_ciTerminates a continuous task in the task pool. It is called after the continuous task is complete. After the task is terminated, the thread that executes the task may be reclaimed. 719e41f4b71Sopenharmony_ci 720e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 721e41f4b71Sopenharmony_ci 722e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 12. 723e41f4b71Sopenharmony_ci 724e41f4b71Sopenharmony_ci**Parameters** 725e41f4b71Sopenharmony_ci 726e41f4b71Sopenharmony_ci| Name| Type | Mandatory| Description | 727e41f4b71Sopenharmony_ci| ------ | ------------- | ---- | -------------------- | 728e41f4b71Sopenharmony_ci| longTask | [LongTask](#longtask12) | Yes | Continuous task to terminate.| 729e41f4b71Sopenharmony_ci 730e41f4b71Sopenharmony_ci**Error codes** 731e41f4b71Sopenharmony_ci 732e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md). 733e41f4b71Sopenharmony_ci 734e41f4b71Sopenharmony_ci| ID| Error Message| 735e41f4b71Sopenharmony_ci| -------- | -------- | 736e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 737e41f4b71Sopenharmony_ci 738e41f4b71Sopenharmony_ci**Example** 739e41f4b71Sopenharmony_ci 740e41f4b71Sopenharmony_ci```ts 741e41f4b71Sopenharmony_ci@Concurrent 742e41f4b71Sopenharmony_cifunction longTask(arg: number): number { 743e41f4b71Sopenharmony_ci let t: number = Date.now(); 744e41f4b71Sopenharmony_ci while (Date.now() - t < arg) { 745e41f4b71Sopenharmony_ci continue; 746e41f4b71Sopenharmony_ci } 747e41f4b71Sopenharmony_ci console.info("longTask has been executed."); 748e41f4b71Sopenharmony_ci return arg; 749e41f4b71Sopenharmony_ci} 750e41f4b71Sopenharmony_ci 751e41f4b71Sopenharmony_cifunction concurrentFunc() { 752e41f4b71Sopenharmony_ci let task1: taskpool.LongTask = new taskpool.LongTask(longTask, 1000); // 1000: sleep time 753e41f4b71Sopenharmony_ci taskpool.execute(task1).then((res: Object)=>{ 754e41f4b71Sopenharmony_ci taskpool.terminateTask(task1); 755e41f4b71Sopenharmony_ci console.info("taskpool longTask result: " + res); 756e41f4b71Sopenharmony_ci }); 757e41f4b71Sopenharmony_ci} 758e41f4b71Sopenharmony_ci 759e41f4b71Sopenharmony_ciconcurrentFunc(); 760e41f4b71Sopenharmony_ci``` 761e41f4b71Sopenharmony_ci 762e41f4b71Sopenharmony_ci## taskpool.isConcurrent<sup>12+</sup> 763e41f4b71Sopenharmony_ci 764e41f4b71Sopenharmony_ciisConcurrent(func: Function): boolean 765e41f4b71Sopenharmony_ci 766e41f4b71Sopenharmony_ciChecks whether a function is a concurrent function. 767e41f4b71Sopenharmony_ci 768e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 769e41f4b71Sopenharmony_ci 770e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 12. 771e41f4b71Sopenharmony_ci 772e41f4b71Sopenharmony_ci**Parameters** 773e41f4b71Sopenharmony_ci 774e41f4b71Sopenharmony_ci| Name| Type | Mandatory| Description | 775e41f4b71Sopenharmony_ci| ------ | ------------- | ---- | -------------------- | 776e41f4b71Sopenharmony_ci| func | Function | Yes | Function to check.| 777e41f4b71Sopenharmony_ci 778e41f4b71Sopenharmony_ci**Return value** 779e41f4b71Sopenharmony_ci 780e41f4b71Sopenharmony_ci| Type | Description | 781e41f4b71Sopenharmony_ci| ------- | ------------------------------------ | 782e41f4b71Sopenharmony_ci| boolean | **true**: The function is a concurrent function, that is, a function decorated with [@Concurrent decorator](../../arkts-utils/arkts-concurrent.md).<br>**false**: The function is not a concurrent function.| 783e41f4b71Sopenharmony_ci 784e41f4b71Sopenharmony_ci**Error codes** 785e41f4b71Sopenharmony_ci 786e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md). 787e41f4b71Sopenharmony_ci 788e41f4b71Sopenharmony_ci| ID| Error Message| 789e41f4b71Sopenharmony_ci| -------- | -------- | 790e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 791e41f4b71Sopenharmony_ci 792e41f4b71Sopenharmony_ci**Example** 793e41f4b71Sopenharmony_ci 794e41f4b71Sopenharmony_ci```ts 795e41f4b71Sopenharmony_ci@Concurrent 796e41f4b71Sopenharmony_cifunction test() {} 797e41f4b71Sopenharmony_ci 798e41f4b71Sopenharmony_cilet result: Boolean = taskpool.isConcurrent(test) 799e41f4b71Sopenharmony_ciconsole.info("result is: " + result) 800e41f4b71Sopenharmony_ci``` 801e41f4b71Sopenharmony_ci 802e41f4b71Sopenharmony_ci## taskpool.getTaskPoolInfo<sup>10+</sup> 803e41f4b71Sopenharmony_ci 804e41f4b71Sopenharmony_cigetTaskPoolInfo(): TaskPoolInfo 805e41f4b71Sopenharmony_ci 806e41f4b71Sopenharmony_ciObtains internal information about this task pool, including thread information and task information. 807e41f4b71Sopenharmony_ci 808e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 809e41f4b71Sopenharmony_ci 810e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 811e41f4b71Sopenharmony_ci 812e41f4b71Sopenharmony_ci**Return value** 813e41f4b71Sopenharmony_ci 814e41f4b71Sopenharmony_ci| Type | Description | 815e41f4b71Sopenharmony_ci| ----------------------------------- | ------------------ | 816e41f4b71Sopenharmony_ci| [TaskPoolInfo](#taskpoolinfo10) | Internal information about the task pool. | 817e41f4b71Sopenharmony_ci 818e41f4b71Sopenharmony_ci**Example** 819e41f4b71Sopenharmony_ci 820e41f4b71Sopenharmony_ci```ts 821e41f4b71Sopenharmony_cilet taskpoolInfo: taskpool.TaskPoolInfo = taskpool.getTaskPoolInfo(); 822e41f4b71Sopenharmony_ci``` 823e41f4b71Sopenharmony_ci 824e41f4b71Sopenharmony_ci## Priority 825e41f4b71Sopenharmony_ci 826e41f4b71Sopenharmony_ciEnumerates the priorities available for created tasks. The task priority applies during task execution. The worker thread priority is updated with the task priority. For details about the mappings, see [QoS Level](../../napi/qos-guidelines.md#qos-level). 827e41f4b71Sopenharmony_ci 828e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 829e41f4b71Sopenharmony_ci 830e41f4b71Sopenharmony_ci| Name| Value| Description| 831e41f4b71Sopenharmony_ci| -------- | -------- | -------- | 832e41f4b71Sopenharmony_ci| HIGH | 0 | The task has a high priority.<br>**Atomic service API**: This API can be used in atomic services since API version 11.| 833e41f4b71Sopenharmony_ci| MEDIUM | 1 | The task has a medium priority.<br>**Atomic service API**: This API can be used in atomic services since API version 11.| 834e41f4b71Sopenharmony_ci| LOW | 2 | The task has a low priority.<br>**Atomic service API**: This API can be used in atomic services since API version 11.| 835e41f4b71Sopenharmony_ci| IDLE<sup>12+</sup> | 3 | The task is a background task.<br>**Atomic service API**: This API can be used in atomic services since API version 12.| 836e41f4b71Sopenharmony_ci 837e41f4b71Sopenharmony_ci**Example** 838e41f4b71Sopenharmony_ci 839e41f4b71Sopenharmony_ci```ts 840e41f4b71Sopenharmony_ci@Concurrent 841e41f4b71Sopenharmony_cifunction printArgs(args: number): number { 842e41f4b71Sopenharmony_ci let t: number = Date.now(); 843e41f4b71Sopenharmony_ci while (Date.now() - t < 1000) { // 1000: delay 1s 844e41f4b71Sopenharmony_ci continue; 845e41f4b71Sopenharmony_ci } 846e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 847e41f4b71Sopenharmony_ci return args; 848e41f4b71Sopenharmony_ci} 849e41f4b71Sopenharmony_ci 850e41f4b71Sopenharmony_cilet allCount = 100; // 100: test number 851e41f4b71Sopenharmony_cilet taskArray: Array<taskpool.Task> = []; 852e41f4b71Sopenharmony_ci// Create 400 tasks and add them to taskArray. 853e41f4b71Sopenharmony_cifor (let i: number = 0; i < allCount; i++) { 854e41f4b71Sopenharmony_ci let task1: taskpool.Task = new taskpool.Task(printArgs, i); 855e41f4b71Sopenharmony_ci taskArray.push(task1); 856e41f4b71Sopenharmony_ci let task2: taskpool.Task = new taskpool.Task(printArgs, i * 10); // 10: test number 857e41f4b71Sopenharmony_ci taskArray.push(task2); 858e41f4b71Sopenharmony_ci let task3: taskpool.Task = new taskpool.Task(printArgs, i * 100); // 100: test number 859e41f4b71Sopenharmony_ci taskArray.push(task3); 860e41f4b71Sopenharmony_ci let task4: taskpool.Task = new taskpool.Task(printArgs, i * 1000); // 1000: test number 861e41f4b71Sopenharmony_ci taskArray.push(task4); 862e41f4b71Sopenharmony_ci} 863e41f4b71Sopenharmony_ci 864e41f4b71Sopenharmony_ci// Obtain different tasks from taskArray and specify different priorities for execution. 865e41f4b71Sopenharmony_cifor (let i: number = 0; i < taskArray.length; i+=4) { // 4: Four tasks are executed each time. When obtaining tasks cyclically, obtain the four items following the last batch to ensure that different tasks are obtained each time. 866e41f4b71Sopenharmony_ci taskpool.execute(taskArray[i], taskpool.Priority.HIGH); 867e41f4b71Sopenharmony_ci taskpool.execute(taskArray[i + 1], taskpool.Priority.LOW); 868e41f4b71Sopenharmony_ci taskpool.execute(taskArray[i + 2], taskpool.Priority.MEDIUM); 869e41f4b71Sopenharmony_ci taskpool.execute(taskArray[i + 3], taskpool.Priority.IDLE); 870e41f4b71Sopenharmony_ci} 871e41f4b71Sopenharmony_ci``` 872e41f4b71Sopenharmony_ci 873e41f4b71Sopenharmony_ci## Task 874e41f4b71Sopenharmony_ci 875e41f4b71Sopenharmony_ciImplements a task. Before calling any APIs in **Task**, you must use [constructor](#constructor) to create a **Task** instance. A task can be executed for multiple times, placed in a task group or queue for execution, or added with dependencies for execution. 876e41f4b71Sopenharmony_ci 877e41f4b71Sopenharmony_ci### Attributes 878e41f4b71Sopenharmony_ci 879e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 880e41f4b71Sopenharmony_ci 881e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 882e41f4b71Sopenharmony_ci 883e41f4b71Sopenharmony_ci| Name | Type | Readable| Writable| Description | 884e41f4b71Sopenharmony_ci| -------------------- | --------- | ---- | ---- | ------------------------------------------------------------ | 885e41f4b71Sopenharmony_ci| function | Function | Yes | Yes | Function to be passed in during task creation. For details about the supported return value types of the function, see [Sequenceable Data Types](#sequenceable-data-types).| 886e41f4b71Sopenharmony_ci| arguments | Object[] | Yes | Yes | Arguments of the function. For details about the supported parameter types, see [Sequenceable Data Types](#sequenceable-data-types).| 887e41f4b71Sopenharmony_ci| name<sup>11+</sup> | string | Yes | No | Name of the task specified when the task is created. | 888e41f4b71Sopenharmony_ci| totalDuration<sup>11+</sup> | number | Yes | No | Total execution time of the task. | 889e41f4b71Sopenharmony_ci| ioDuration<sup>11+</sup> | number | Yes | No | Asynchronous I/O time of the task. | 890e41f4b71Sopenharmony_ci| cpuDuration<sup>11+</sup> | number | Yes | No | CPU time of the task. | 891e41f4b71Sopenharmony_ci 892e41f4b71Sopenharmony_ci### constructor 893e41f4b71Sopenharmony_ci 894e41f4b71Sopenharmony_ciconstructor(func: Function, ...args: Object[]) 895e41f4b71Sopenharmony_ci 896e41f4b71Sopenharmony_ciA constructor used to create a **Task** instance. 897e41f4b71Sopenharmony_ci 898e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 899e41f4b71Sopenharmony_ci 900e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 901e41f4b71Sopenharmony_ci 902e41f4b71Sopenharmony_ci**Parameters** 903e41f4b71Sopenharmony_ci 904e41f4b71Sopenharmony_ci| Name| Type | Mandatory| Description | 905e41f4b71Sopenharmony_ci| ------ | --------- | ---- | -------------------------------------------------------------------- | 906e41f4b71Sopenharmony_ci| func | Function | Yes | Function to be executed. The function must be decorated using [@Concurrent decorator](../../arkts-utils/arkts-concurrent.md). For details about the supported return value types of the function, see [Sequenceable Data Types](#sequenceable-data-types). | 907e41f4b71Sopenharmony_ci| args | Object[] | No | Arguments of the function. For details about the supported parameter types, see [Sequenceable Data Types](#sequenceable-data-types). The default value is **undefined**.| 908e41f4b71Sopenharmony_ci 909e41f4b71Sopenharmony_ci**Error codes** 910e41f4b71Sopenharmony_ci 911e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 912e41f4b71Sopenharmony_ci 913e41f4b71Sopenharmony_ci| ID| Error Message | 914e41f4b71Sopenharmony_ci| -------- | --------------------------------------- | 915e41f4b71Sopenharmony_ci| 401 | The input parameters are invalid. | 916e41f4b71Sopenharmony_ci| 10200014 | The function is not marked as concurrent. | 917e41f4b71Sopenharmony_ci 918e41f4b71Sopenharmony_ci**Example** 919e41f4b71Sopenharmony_ci 920e41f4b71Sopenharmony_ci```ts 921e41f4b71Sopenharmony_ci@Concurrent 922e41f4b71Sopenharmony_cifunction printArgs(args: number): number { 923e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 924e41f4b71Sopenharmony_ci return args; 925e41f4b71Sopenharmony_ci} 926e41f4b71Sopenharmony_ci 927e41f4b71Sopenharmony_cilet task: taskpool.Task = new taskpool.Task(printArgs, "this is my first Task"); 928e41f4b71Sopenharmony_ci``` 929e41f4b71Sopenharmony_ci 930e41f4b71Sopenharmony_ci### constructor<sup>11+</sup> 931e41f4b71Sopenharmony_ci 932e41f4b71Sopenharmony_ciconstructor(name: string, func: Function, ...args: Object[]) 933e41f4b71Sopenharmony_ci 934e41f4b71Sopenharmony_ciA constructor used to create a **Task** instance, with the task name specified. 935e41f4b71Sopenharmony_ci 936e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 937e41f4b71Sopenharmony_ci 938e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 939e41f4b71Sopenharmony_ci 940e41f4b71Sopenharmony_ci**Parameters** 941e41f4b71Sopenharmony_ci 942e41f4b71Sopenharmony_ci| Name| Type | Mandatory| Description | 943e41f4b71Sopenharmony_ci| ------ | -------- | ---- | ------------------------------------------------------------ | 944e41f4b71Sopenharmony_ci| name | string | Yes | Task name. | 945e41f4b71Sopenharmony_ci| func | Function | Yes | Function to be executed. The function must be decorated using [@Concurrent decorator](../../arkts-utils/arkts-concurrent.md). For details about the supported return value types of the function, see [Sequenceable Data Types](#sequenceable-data-types). | 946e41f4b71Sopenharmony_ci| args | Object[] | No | Arguments of the function. For details about the supported parameter types, see [Sequenceable Data Types](#sequenceable-data-types). The default value is **undefined**.| 947e41f4b71Sopenharmony_ci 948e41f4b71Sopenharmony_ci**Error codes** 949e41f4b71Sopenharmony_ci 950e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 951e41f4b71Sopenharmony_ci 952e41f4b71Sopenharmony_ci| ID| Error Message | 953e41f4b71Sopenharmony_ci| -------- | --------------------------------------- | 954e41f4b71Sopenharmony_ci| 401 | The input parameters are invalid. | 955e41f4b71Sopenharmony_ci| 10200014 | The function is not marked as concurrent. | 956e41f4b71Sopenharmony_ci 957e41f4b71Sopenharmony_ci**Example** 958e41f4b71Sopenharmony_ci 959e41f4b71Sopenharmony_ci```ts 960e41f4b71Sopenharmony_ci@Concurrent 961e41f4b71Sopenharmony_cifunction printArgs(args: string): string { 962e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 963e41f4b71Sopenharmony_ci return args; 964e41f4b71Sopenharmony_ci} 965e41f4b71Sopenharmony_ci 966e41f4b71Sopenharmony_cilet taskName: string = "taskName"; 967e41f4b71Sopenharmony_cilet task: taskpool.Task = new taskpool.Task(taskName, printArgs, "this is my first Task"); 968e41f4b71Sopenharmony_cilet name: string = task.name; 969e41f4b71Sopenharmony_ci``` 970e41f4b71Sopenharmony_ci 971e41f4b71Sopenharmony_ci### isCanceled<sup>10+</sup> 972e41f4b71Sopenharmony_ci 973e41f4b71Sopenharmony_cistatic isCanceled(): boolean 974e41f4b71Sopenharmony_ci 975e41f4b71Sopenharmony_ciChecks whether the running task is canceled. Before using this API, you must create a **Task** instance. 976e41f4b71Sopenharmony_ci 977e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 978e41f4b71Sopenharmony_ci 979e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 980e41f4b71Sopenharmony_ci 981e41f4b71Sopenharmony_ci**Return value** 982e41f4b71Sopenharmony_ci 983e41f4b71Sopenharmony_ci| Type | Description | 984e41f4b71Sopenharmony_ci| ------- | ------------------------------------ | 985e41f4b71Sopenharmony_ci| boolean | Returns **true** if the running task is canceled; returns **false** otherwise.| 986e41f4b71Sopenharmony_ci 987e41f4b71Sopenharmony_ci**Example** 988e41f4b71Sopenharmony_ci 989e41f4b71Sopenharmony_ci```ts 990e41f4b71Sopenharmony_ci@Concurrent 991e41f4b71Sopenharmony_cifunction inspectStatus(arg: number): number { 992e41f4b71Sopenharmony_ci // do something 993e41f4b71Sopenharmony_ci if (taskpool.Task.isCanceled()) { 994e41f4b71Sopenharmony_ci console.info("task has been canceled."); 995e41f4b71Sopenharmony_ci // do something 996e41f4b71Sopenharmony_ci return arg + 1; 997e41f4b71Sopenharmony_ci } 998e41f4b71Sopenharmony_ci // do something 999e41f4b71Sopenharmony_ci return arg; 1000e41f4b71Sopenharmony_ci} 1001e41f4b71Sopenharmony_ci``` 1002e41f4b71Sopenharmony_ci 1003e41f4b71Sopenharmony_ci> **NOTE** 1004e41f4b71Sopenharmony_ci> 1005e41f4b71Sopenharmony_ci> **isCanceled** must be used together with **taskpool.cancel**. If **cancel** is not called, **isCanceled** returns **false** by default. 1006e41f4b71Sopenharmony_ci 1007e41f4b71Sopenharmony_ci**Example** 1008e41f4b71Sopenharmony_ci 1009e41f4b71Sopenharmony_ci```ts 1010e41f4b71Sopenharmony_ci@Concurrent 1011e41f4b71Sopenharmony_cifunction inspectStatus(arg: number): number { 1012e41f4b71Sopenharmony_ci // Check whether the task has been canceled and respond accordingly. 1013e41f4b71Sopenharmony_ci if (taskpool.Task.isCanceled()) { 1014e41f4b71Sopenharmony_ci console.info("task has been canceled before 2s sleep."); 1015e41f4b71Sopenharmony_ci return arg + 2; 1016e41f4b71Sopenharmony_ci } 1017e41f4b71Sopenharmony_ci // Wait for 2s. 1018e41f4b71Sopenharmony_ci let t: number = Date.now(); 1019e41f4b71Sopenharmony_ci while (Date.now() - t < 2000) { 1020e41f4b71Sopenharmony_ci continue; 1021e41f4b71Sopenharmony_ci } 1022e41f4b71Sopenharmony_ci // Check again whether the task has been canceled and respond accordingly. 1023e41f4b71Sopenharmony_ci if (taskpool.Task.isCanceled()) { 1024e41f4b71Sopenharmony_ci console.info("task has been canceled after 2s sleep."); 1025e41f4b71Sopenharmony_ci return arg + 3; 1026e41f4b71Sopenharmony_ci } 1027e41f4b71Sopenharmony_ci return arg + 1; 1028e41f4b71Sopenharmony_ci} 1029e41f4b71Sopenharmony_ci 1030e41f4b71Sopenharmony_cilet task: taskpool.Task = new taskpool.Task(inspectStatus, 100); // 100: test number 1031e41f4b71Sopenharmony_citaskpool.execute(task).then((res: Object)=>{ 1032e41f4b71Sopenharmony_ci console.info("taskpool test result: " + res); 1033e41f4b71Sopenharmony_ci}).catch((err: string) => { 1034e41f4b71Sopenharmony_ci console.error("taskpool test occur error: " + err); 1035e41f4b71Sopenharmony_ci}); 1036e41f4b71Sopenharmony_ci// If cancel is not called, isCanceled() returns false by default, and the task execution result is 101. 1037e41f4b71Sopenharmony_ci``` 1038e41f4b71Sopenharmony_ci 1039e41f4b71Sopenharmony_ci### setTransferList<sup>10+</sup> 1040e41f4b71Sopenharmony_ci 1041e41f4b71Sopenharmony_cisetTransferList(transfer?: ArrayBuffer[]): void 1042e41f4b71Sopenharmony_ci 1043e41f4b71Sopenharmony_ciSets the task transfer list. Before using this API, you must create a **Task** instance. If this API is not called, the ArrayBuffer in the data is transferred by default. 1044e41f4b71Sopenharmony_ci 1045e41f4b71Sopenharmony_ci> **NOTE** 1046e41f4b71Sopenharmony_ci> 1047e41f4b71Sopenharmony_ci> This API is used to set the task transfer list in the form of **ArrayBuffer** in the task pool. The **ArrayBuffer** instance does not copy the content in the task to the worker thread during transfer. Instead, it transfers the buffer control right to the worker thread. After the transfer, the **ArrayBuffer** instance becomes invalid. An empty **ArrayBuffer** will not be transferred. 1048e41f4b71Sopenharmony_ci 1049e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 1050e41f4b71Sopenharmony_ci 1051e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 1052e41f4b71Sopenharmony_ci 1053e41f4b71Sopenharmony_ci**Parameters** 1054e41f4b71Sopenharmony_ci 1055e41f4b71Sopenharmony_ci| Name | Type | Mandatory| Description | 1056e41f4b71Sopenharmony_ci| -------- | ------------- | ---- | --------------------------------------------- | 1057e41f4b71Sopenharmony_ci| transfer | ArrayBuffer[] | No | **ArrayBuffer** instance holding the objects to transfer. The default value is an empty array.| 1058e41f4b71Sopenharmony_ci 1059e41f4b71Sopenharmony_ci**Error codes** 1060e41f4b71Sopenharmony_ci 1061e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 1062e41f4b71Sopenharmony_ci 1063e41f4b71Sopenharmony_ci| ID| Error Message | 1064e41f4b71Sopenharmony_ci| -------- | -------------------------------------------------------------- | 1065e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Incorrect parameter types; 2. Parameter verification failed. | 1066e41f4b71Sopenharmony_ci| 10200029 | An ArrayBuffer cannot be set as both a transfer list and a clone list. | 1067e41f4b71Sopenharmony_ci 1068e41f4b71Sopenharmony_ci**Example** 1069e41f4b71Sopenharmony_ci 1070e41f4b71Sopenharmony_ci```ts 1071e41f4b71Sopenharmony_ci@Concurrent 1072e41f4b71Sopenharmony_cifunction testTransfer(arg1: ArrayBuffer, arg2: ArrayBuffer): number { 1073e41f4b71Sopenharmony_ci console.info("testTransfer arg1 byteLength: " + arg1.byteLength); 1074e41f4b71Sopenharmony_ci console.info("testTransfer arg2 byteLength: " + arg2.byteLength); 1075e41f4b71Sopenharmony_ci return 100; 1076e41f4b71Sopenharmony_ci} 1077e41f4b71Sopenharmony_ci 1078e41f4b71Sopenharmony_cilet buffer: ArrayBuffer = new ArrayBuffer(8); 1079e41f4b71Sopenharmony_cilet view: Uint8Array = new Uint8Array(buffer); 1080e41f4b71Sopenharmony_cilet buffer1: ArrayBuffer = new ArrayBuffer(16); 1081e41f4b71Sopenharmony_cilet view1: Uint8Array = new Uint8Array(buffer1); 1082e41f4b71Sopenharmony_ci 1083e41f4b71Sopenharmony_ciconsole.info("testTransfer view byteLength: " + view.byteLength); 1084e41f4b71Sopenharmony_ciconsole.info("testTransfer view1 byteLength: " + view1.byteLength); 1085e41f4b71Sopenharmony_ci// The execution result is as follows: 1086e41f4b71Sopenharmony_ci// testTransfer view byteLength: 8 1087e41f4b71Sopenharmony_ci// testTransfer view1 byteLength: 16 1088e41f4b71Sopenharmony_ci 1089e41f4b71Sopenharmony_cilet task: taskpool.Task = new taskpool.Task(testTransfer, view, view1); 1090e41f4b71Sopenharmony_citask.setTransferList([view.buffer, view1.buffer]); 1091e41f4b71Sopenharmony_citaskpool.execute(task).then((res: Object)=>{ 1092e41f4b71Sopenharmony_ci console.info("test result: " + res); 1093e41f4b71Sopenharmony_ci}).catch((e: string)=>{ 1094e41f4b71Sopenharmony_ci console.error("test catch: " + e); 1095e41f4b71Sopenharmony_ci}) 1096e41f4b71Sopenharmony_ciconsole.info("testTransfer view2 byteLength: " + view.byteLength); 1097e41f4b71Sopenharmony_ciconsole.info("testTransfer view3 byteLength: " + view1.byteLength); 1098e41f4b71Sopenharmony_ci// The value is 0 after transfer. The execution result is as follows: 1099e41f4b71Sopenharmony_ci// testTransfer view2 byteLength: 0 1100e41f4b71Sopenharmony_ci// testTransfer view3 byteLength: 0 1101e41f4b71Sopenharmony_ci``` 1102e41f4b71Sopenharmony_ci 1103e41f4b71Sopenharmony_ci 1104e41f4b71Sopenharmony_ci### setCloneList<sup>11+</sup> 1105e41f4b71Sopenharmony_ci 1106e41f4b71Sopenharmony_cisetCloneList(cloneList: Object[] | ArrayBuffer[]): void 1107e41f4b71Sopenharmony_ci 1108e41f4b71Sopenharmony_ciSets the task clone list. Before using this API, you must create a **Task** instance. 1109e41f4b71Sopenharmony_ci 1110e41f4b71Sopenharmony_ci> **NOTE** 1111e41f4b71Sopenharmony_ci> 1112e41f4b71Sopenharmony_ci> This API must be used together with the [@Sendable decorator](../../arkts-utils/arkts-sendable.md#sendable-decorator-declaring-and-verifying-a-sendable-class). Otherwise, an exception is thrown. 1113e41f4b71Sopenharmony_ci 1114e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 1115e41f4b71Sopenharmony_ci 1116e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 1117e41f4b71Sopenharmony_ci 1118e41f4b71Sopenharmony_ci**Parameters** 1119e41f4b71Sopenharmony_ci 1120e41f4b71Sopenharmony_ci| Name | Type | Mandatory| Description | 1121e41f4b71Sopenharmony_ci| --------- | ------------------------ | ---- | --------------------------------------------- | 1122e41f4b71Sopenharmony_ci| cloneList | Object[] \| ArrayBuffer[] | Yes| - The type of the passed-in array must be [sendable data](../../arkts-utils/arkts-sendable.md#sendable-data) or ArrayBuffer.<br>- All [Sendable class](../../arkts-utils/arkts-sendable.md#sendable-class) instances or ArrayBuffer objects passed in to **cloneList** are transferred in copy mode between threads. This means that any modification to the destination objects does not affect the original objects.| 1123e41f4b71Sopenharmony_ci 1124e41f4b71Sopenharmony_ci**Error codes** 1125e41f4b71Sopenharmony_ci 1126e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 1127e41f4b71Sopenharmony_ci 1128e41f4b71Sopenharmony_ci| ID| Error Message | 1129e41f4b71Sopenharmony_ci| -------- | -------------------------------------------------------------- | 1130e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 1131e41f4b71Sopenharmony_ci| 10200029 | An ArrayBuffer cannot be set as both a transfer list and a clone list. | 1132e41f4b71Sopenharmony_ci 1133e41f4b71Sopenharmony_ci**Example** 1134e41f4b71Sopenharmony_ci 1135e41f4b71Sopenharmony_ci```ts 1136e41f4b71Sopenharmony_ci// sendable.ets 1137e41f4b71Sopenharmony_ci// Define two Sendable classes: BaseClass and its child class DeriveClass. 1138e41f4b71Sopenharmony_ci@Sendable 1139e41f4b71Sopenharmony_ciexport class BaseClass { 1140e41f4b71Sopenharmony_ci private str: string = "sendable: BaseClass"; 1141e41f4b71Sopenharmony_ci static num :number = 10; 1142e41f4b71Sopenharmony_ci str1: string = "sendable: this is BaseClass's string"; 1143e41f4b71Sopenharmony_ci num1: number = 5; 1144e41f4b71Sopenharmony_ci isDone1: boolean = false; 1145e41f4b71Sopenharmony_ci 1146e41f4b71Sopenharmony_ci private fibonacciRecursive(n: number): number { 1147e41f4b71Sopenharmony_ci if (n <= 1) { 1148e41f4b71Sopenharmony_ci return n; 1149e41f4b71Sopenharmony_ci } else { 1150e41f4b71Sopenharmony_ci return this.fibonacciRecursive(n - 1) + this.fibonacciRecursive(n - 2); 1151e41f4b71Sopenharmony_ci } 1152e41f4b71Sopenharmony_ci } 1153e41f4b71Sopenharmony_ci 1154e41f4b71Sopenharmony_ci private privateFunc(num: number): number{ 1155e41f4b71Sopenharmony_ci let res: number = this.fibonacciRecursive(num); 1156e41f4b71Sopenharmony_ci console.info("sendable: BaseClass privateFunc res is: " + res); 1157e41f4b71Sopenharmony_ci return res; 1158e41f4b71Sopenharmony_ci } 1159e41f4b71Sopenharmony_ci 1160e41f4b71Sopenharmony_ci publicFunc(num: number): number { 1161e41f4b71Sopenharmony_ci return this.privateFunc(num); 1162e41f4b71Sopenharmony_ci } 1163e41f4b71Sopenharmony_ci 1164e41f4b71Sopenharmony_ci get GetNum(): number { 1165e41f4b71Sopenharmony_ci return this.num1; 1166e41f4b71Sopenharmony_ci } 1167e41f4b71Sopenharmony_ci set SetNum(num: number) { 1168e41f4b71Sopenharmony_ci this.num1 = num; 1169e41f4b71Sopenharmony_ci } 1170e41f4b71Sopenharmony_ci 1171e41f4b71Sopenharmony_ci constructor(){ 1172e41f4b71Sopenharmony_ci console.info(this.str); 1173e41f4b71Sopenharmony_ci this.isDone1 = true; 1174e41f4b71Sopenharmony_ci } 1175e41f4b71Sopenharmony_ci} 1176e41f4b71Sopenharmony_ci 1177e41f4b71Sopenharmony_ci@Sendable 1178e41f4b71Sopenharmony_ciexport class DeriveClass extends BaseClass { 1179e41f4b71Sopenharmony_ci name: string = "sendable: this is DeriveClass"; 1180e41f4b71Sopenharmony_ci printName() { 1181e41f4b71Sopenharmony_ci console.info(this.name); 1182e41f4b71Sopenharmony_ci } 1183e41f4b71Sopenharmony_ci constructor() { 1184e41f4b71Sopenharmony_ci super(); 1185e41f4b71Sopenharmony_ci } 1186e41f4b71Sopenharmony_ci} 1187e41f4b71Sopenharmony_ci``` 1188e41f4b71Sopenharmony_ci 1189e41f4b71Sopenharmony_ci<!--code_no_check--> 1190e41f4b71Sopenharmony_ci```ts 1191e41f4b71Sopenharmony_ci// index.ets 1192e41f4b71Sopenharmony_ci// The main thread calls the methods of BaseClass and DeriveClass in the task pool thread and accesses their attributes. 1193e41f4b71Sopenharmony_ciimport { taskpool } from '@kit.ArkTS' 1194e41f4b71Sopenharmony_ciimport { BusinessError } from '@kit.BasicServicesKit' 1195e41f4b71Sopenharmony_ciimport { BaseClass, DeriveClass } from './sendable' 1196e41f4b71Sopenharmony_ci 1197e41f4b71Sopenharmony_ci@Concurrent 1198e41f4b71Sopenharmony_cifunction testFunc(arr: Array<BaseClass>, num: number): number { 1199e41f4b71Sopenharmony_ci let baseInstance1 = arr[0]; 1200e41f4b71Sopenharmony_ci console.info("sendable: str1 is: " + baseInstance1.str1); 1201e41f4b71Sopenharmony_ci baseInstance1.SetNum = 100; 1202e41f4b71Sopenharmony_ci console.info("sendable: num1 is: " + baseInstance1.GetNum); 1203e41f4b71Sopenharmony_ci console.info("sendable: isDone1 is: " + baseInstance1.isDone1); 1204e41f4b71Sopenharmony_ci // Obtain the result of the item specified by num from Fibonacci sequence. 1205e41f4b71Sopenharmony_ci let res: number = baseInstance1.publicFunc(num); 1206e41f4b71Sopenharmony_ci return res; 1207e41f4b71Sopenharmony_ci} 1208e41f4b71Sopenharmony_ci 1209e41f4b71Sopenharmony_ci@Concurrent 1210e41f4b71Sopenharmony_cifunction printLog(arr: Array<DeriveClass>): void { 1211e41f4b71Sopenharmony_ci let deriveInstance = arr[0]; 1212e41f4b71Sopenharmony_ci deriveInstance.printName(); 1213e41f4b71Sopenharmony_ci} 1214e41f4b71Sopenharmony_ci 1215e41f4b71Sopenharmony_ci@Entry 1216e41f4b71Sopenharmony_ci@Component 1217e41f4b71Sopenharmony_cistruct Index { 1218e41f4b71Sopenharmony_ci @State message: string = 'Hello World' 1219e41f4b71Sopenharmony_ci 1220e41f4b71Sopenharmony_ci build() { 1221e41f4b71Sopenharmony_ci Row() { 1222e41f4b71Sopenharmony_ci Column() { 1223e41f4b71Sopenharmony_ci Text(this.message) 1224e41f4b71Sopenharmony_ci .fontSize(50) 1225e41f4b71Sopenharmony_ci .fontWeight(FontWeight.Bold) 1226e41f4b71Sopenharmony_ci Button() { 1227e41f4b71Sopenharmony_ci Text("TaskPool Test") 1228e41f4b71Sopenharmony_ci }.onClick(() => { 1229e41f4b71Sopenharmony_ci // task1 calls BaseClass.str1/BaseClass.SetNum/BaseClass.GetNum/BaseClass.isDone1/BaseClass.publicFunc. 1230e41f4b71Sopenharmony_ci let baseInstance1: BaseClass = new BaseClass(); 1231e41f4b71Sopenharmony_ci let array1 = new Array<BaseClass>(); 1232e41f4b71Sopenharmony_ci array1.push(baseInstance1); 1233e41f4b71Sopenharmony_ci let task1 = new taskpool.Task(testFunc, array1, 10); 1234e41f4b71Sopenharmony_ci task1.setCloneList(array1); 1235e41f4b71Sopenharmony_ci taskpool.execute(task1).then((res: Object) => { 1236e41f4b71Sopenharmony_ci console.info("sendable: task1 res is: " + res); 1237e41f4b71Sopenharmony_ci }).catch((e:BusinessError) => { 1238e41f4b71Sopenharmony_ci console.error(`sendable: task1 execute Code is ${e.code}, message is ${e.message}`); 1239e41f4b71Sopenharmony_ci }) 1240e41f4b71Sopenharmony_ci 1241e41f4b71Sopenharmony_ci // task2 calls DeriveClass.printName. 1242e41f4b71Sopenharmony_ci let deriveInstance: DeriveClass = new DeriveClass(); 1243e41f4b71Sopenharmony_ci let array2 = new Array<DeriveClass>(); 1244e41f4b71Sopenharmony_ci array2.push(deriveInstance); 1245e41f4b71Sopenharmony_ci let task2 = new taskpool.Task(printLog, array2); 1246e41f4b71Sopenharmony_ci task2.setCloneList(array2); 1247e41f4b71Sopenharmony_ci taskpool.execute(task2).then(() => { 1248e41f4b71Sopenharmony_ci console.info("sendable: task2 execute success"); 1249e41f4b71Sopenharmony_ci }).catch((e:BusinessError) => { 1250e41f4b71Sopenharmony_ci console.error(`sendable: task2 execute Code is ${e.code}, message is ${e.message}`); 1251e41f4b71Sopenharmony_ci }) 1252e41f4b71Sopenharmony_ci }) 1253e41f4b71Sopenharmony_ci .height('15%') 1254e41f4b71Sopenharmony_ci .width('30%') 1255e41f4b71Sopenharmony_ci } 1256e41f4b71Sopenharmony_ci .width('100%') 1257e41f4b71Sopenharmony_ci } 1258e41f4b71Sopenharmony_ci .height('100%') 1259e41f4b71Sopenharmony_ci } 1260e41f4b71Sopenharmony_ci} 1261e41f4b71Sopenharmony_ci``` 1262e41f4b71Sopenharmony_ci 1263e41f4b71Sopenharmony_ci 1264e41f4b71Sopenharmony_ci### sendData<sup>11+</sup> 1265e41f4b71Sopenharmony_ci 1266e41f4b71Sopenharmony_cistatic sendData(...args: Object[]): void 1267e41f4b71Sopenharmony_ci 1268e41f4b71Sopenharmony_ciSends data to the host thread and triggers the registered callback. Before using this API, you must create a **Task** instance. 1269e41f4b71Sopenharmony_ci 1270e41f4b71Sopenharmony_ci> **NOTE** 1271e41f4b71Sopenharmony_ci> 1272e41f4b71Sopenharmony_ci> - The API is called in the TaskPool thread. 1273e41f4b71Sopenharmony_ci> - Do not use this API in a callback function. 1274e41f4b71Sopenharmony_ci> - Before calling this API, ensure that the callback function for processing data has been registered in the host thread. 1275e41f4b71Sopenharmony_ci 1276e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 1277e41f4b71Sopenharmony_ci 1278e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 1279e41f4b71Sopenharmony_ci 1280e41f4b71Sopenharmony_ci**Parameters** 1281e41f4b71Sopenharmony_ci 1282e41f4b71Sopenharmony_ci| Name | Type | Mandatory| Description | 1283e41f4b71Sopenharmony_ci| -------- | ------------- | ---- | ------------------------------------------------- | 1284e41f4b71Sopenharmony_ci| args | Object[] | No | Data to be used as the input parameter of the registered callback. For details about the supported parameter types, see [Sequenceable Data Types](#sequenceable-data-types). The default value is **undefined**.| 1285e41f4b71Sopenharmony_ci 1286e41f4b71Sopenharmony_ci**Error codes** 1287e41f4b71Sopenharmony_ci 1288e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 1289e41f4b71Sopenharmony_ci 1290e41f4b71Sopenharmony_ci| ID| Error Message | 1291e41f4b71Sopenharmony_ci| -------- | --------------------------------------- | 1292e41f4b71Sopenharmony_ci| 401 | The input parameters are invalid. | 1293e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. | 1294e41f4b71Sopenharmony_ci| 10200022 | The function is not called in the TaskPool thread. | 1295e41f4b71Sopenharmony_ci| 10200023 | The function is not called in the concurrent function. | 1296e41f4b71Sopenharmony_ci| 10200024 | The callback is not registered on the host side. | 1297e41f4b71Sopenharmony_ci 1298e41f4b71Sopenharmony_ci**Example** 1299e41f4b71Sopenharmony_ci 1300e41f4b71Sopenharmony_ci```ts 1301e41f4b71Sopenharmony_ci@Concurrent 1302e41f4b71Sopenharmony_cifunction sendDataTest(num: number): number { 1303e41f4b71Sopenharmony_ci let res: number = num * 10; 1304e41f4b71Sopenharmony_ci taskpool.Task.sendData(res); 1305e41f4b71Sopenharmony_ci return num; 1306e41f4b71Sopenharmony_ci} 1307e41f4b71Sopenharmony_ci 1308e41f4b71Sopenharmony_cifunction printLog(data: number): void { 1309e41f4b71Sopenharmony_ci console.info("taskpool: data is: " + data); 1310e41f4b71Sopenharmony_ci} 1311e41f4b71Sopenharmony_ci 1312e41f4b71Sopenharmony_ciasync function taskpoolTest(): Promise<void> { 1313e41f4b71Sopenharmony_ci try { 1314e41f4b71Sopenharmony_ci let task: taskpool.Task = new taskpool.Task(sendDataTest, 1); 1315e41f4b71Sopenharmony_ci task.onReceiveData(printLog); 1316e41f4b71Sopenharmony_ci await taskpool.execute(task); 1317e41f4b71Sopenharmony_ci } catch (e) { 1318e41f4b71Sopenharmony_ci console.error(`taskpool: error code: ${e.code}, info: ${e.message}`); 1319e41f4b71Sopenharmony_ci } 1320e41f4b71Sopenharmony_ci} 1321e41f4b71Sopenharmony_ci 1322e41f4b71Sopenharmony_citaskpoolTest(); 1323e41f4b71Sopenharmony_ci``` 1324e41f4b71Sopenharmony_ci 1325e41f4b71Sopenharmony_ci 1326e41f4b71Sopenharmony_ci### onReceiveData<sup>11+</sup> 1327e41f4b71Sopenharmony_ci 1328e41f4b71Sopenharmony_cionReceiveData(callback?: Function): void 1329e41f4b71Sopenharmony_ci 1330e41f4b71Sopenharmony_ciRegisters a callback for a task to receive and process data from the worker thread. Before using this API, you must create a **Task** instance. 1331e41f4b71Sopenharmony_ci 1332e41f4b71Sopenharmony_ci> **NOTE** 1333e41f4b71Sopenharmony_ci> 1334e41f4b71Sopenharmony_ci> If multiple callbacks are registered for the same task, only the last registration takes effect. 1335e41f4b71Sopenharmony_ci 1336e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 1337e41f4b71Sopenharmony_ci 1338e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 1339e41f4b71Sopenharmony_ci 1340e41f4b71Sopenharmony_ci**Parameters** 1341e41f4b71Sopenharmony_ci 1342e41f4b71Sopenharmony_ci| Name | Type | Mandatory| Description | 1343e41f4b71Sopenharmony_ci| -------- | -------- | ---- | ------------------------------------------------------------ | 1344e41f4b71Sopenharmony_ci| callback | Function | No | Callback function for processing the data received. The data sent to the host thread is transferred to the callback as an input parameter. If no value is passed in, all the registered callbacks are canceled.| 1345e41f4b71Sopenharmony_ci 1346e41f4b71Sopenharmony_ci**Error codes** 1347e41f4b71Sopenharmony_ci 1348e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md). 1349e41f4b71Sopenharmony_ci 1350e41f4b71Sopenharmony_ci| ID| Error Message| 1351e41f4b71Sopenharmony_ci| -------- | -------- | 1352e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Incorrect parameter types; 2. Parameter verification failed. | 1353e41f4b71Sopenharmony_ci 1354e41f4b71Sopenharmony_ci**Example** 1355e41f4b71Sopenharmony_ci 1356e41f4b71Sopenharmony_ci```ts 1357e41f4b71Sopenharmony_ci@Concurrent 1358e41f4b71Sopenharmony_cifunction ConcurrentFunc(num: number): number { 1359e41f4b71Sopenharmony_ci let res: number = num * 10; 1360e41f4b71Sopenharmony_ci taskpool.Task.sendData(res); 1361e41f4b71Sopenharmony_ci return num; 1362e41f4b71Sopenharmony_ci} 1363e41f4b71Sopenharmony_ci 1364e41f4b71Sopenharmony_cifunction printLog(data: number): void { 1365e41f4b71Sopenharmony_ci console.info("taskpool: data is: " + data); 1366e41f4b71Sopenharmony_ci} 1367e41f4b71Sopenharmony_ci 1368e41f4b71Sopenharmony_ciasync function testFunc(): Promise<void> { 1369e41f4b71Sopenharmony_ci try { 1370e41f4b71Sopenharmony_ci let task: taskpool.Task = new taskpool.Task(ConcurrentFunc, 1); 1371e41f4b71Sopenharmony_ci task.onReceiveData(printLog); 1372e41f4b71Sopenharmony_ci await taskpool.execute(task); 1373e41f4b71Sopenharmony_ci } catch (e) { 1374e41f4b71Sopenharmony_ci console.error(`taskpool: error code: ${e.code}, info: ${e.message}`); 1375e41f4b71Sopenharmony_ci } 1376e41f4b71Sopenharmony_ci} 1377e41f4b71Sopenharmony_ci 1378e41f4b71Sopenharmony_citestFunc(); 1379e41f4b71Sopenharmony_ci``` 1380e41f4b71Sopenharmony_ci 1381e41f4b71Sopenharmony_ci### addDependency<sup>11+</sup> 1382e41f4b71Sopenharmony_ci 1383e41f4b71Sopenharmony_ciaddDependency(...tasks: Task[]): void 1384e41f4b71Sopenharmony_ci 1385e41f4b71Sopenharmony_ciAdds dependent tasks for this task. Before using this API, you must create a **Task** instance. The task and its dependent tasks cannot be a task in a task group or queue, a task that has been executed, or a periodic task. A task with a dependency relationship (a task that depends on another task or a task that is depended on) cannot be executed multiple times. 1386e41f4b71Sopenharmony_ci 1387e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 1388e41f4b71Sopenharmony_ci 1389e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 1390e41f4b71Sopenharmony_ci 1391e41f4b71Sopenharmony_ci**Parameters** 1392e41f4b71Sopenharmony_ci 1393e41f4b71Sopenharmony_ci| Name| Type | Mandatory| Description | 1394e41f4b71Sopenharmony_ci| ------ | --------------- | ---- | ------------------ | 1395e41f4b71Sopenharmony_ci| tasks | [Task](#task)[] | No | Array of tasks on which the current task depends. The default value is **undefined**.| 1396e41f4b71Sopenharmony_ci 1397e41f4b71Sopenharmony_ci**Error codes** 1398e41f4b71Sopenharmony_ci 1399e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 1400e41f4b71Sopenharmony_ci 1401e41f4b71Sopenharmony_ci| ID| Error Message | 1402e41f4b71Sopenharmony_ci| -------- | ------------------------------- | 1403e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 1404e41f4b71Sopenharmony_ci| 10200026 | There is a circular dependency. | 1405e41f4b71Sopenharmony_ci| 10200052 | The periodic task cannot have a dependency. | 1406e41f4b71Sopenharmony_ci 1407e41f4b71Sopenharmony_ci**Example** 1408e41f4b71Sopenharmony_ci 1409e41f4b71Sopenharmony_ci```ts 1410e41f4b71Sopenharmony_ci@Concurrent 1411e41f4b71Sopenharmony_cifunction delay(args: number): number { 1412e41f4b71Sopenharmony_ci let t: number = Date.now(); 1413e41f4b71Sopenharmony_ci while ((Date.now() - t) < 1000) { 1414e41f4b71Sopenharmony_ci continue; 1415e41f4b71Sopenharmony_ci } 1416e41f4b71Sopenharmony_ci return args; 1417e41f4b71Sopenharmony_ci} 1418e41f4b71Sopenharmony_ci 1419e41f4b71Sopenharmony_cilet task1:taskpool.Task = new taskpool.Task(delay, 100); 1420e41f4b71Sopenharmony_cilet task2:taskpool.Task = new taskpool.Task(delay, 200); 1421e41f4b71Sopenharmony_cilet task3:taskpool.Task = new taskpool.Task(delay, 200); 1422e41f4b71Sopenharmony_ci 1423e41f4b71Sopenharmony_ciconsole.info("dependency: add dependency start"); 1424e41f4b71Sopenharmony_citask1.addDependency(task2); 1425e41f4b71Sopenharmony_citask2.addDependency(task3); 1426e41f4b71Sopenharmony_ciconsole.info("dependency: add dependency end"); 1427e41f4b71Sopenharmony_ci 1428e41f4b71Sopenharmony_ciconsole.info("dependency: start execute second") 1429e41f4b71Sopenharmony_citaskpool.execute(task1).then(() => { 1430e41f4b71Sopenharmony_ci console.info("dependency: second task1 success"); 1431e41f4b71Sopenharmony_ci}) 1432e41f4b71Sopenharmony_citaskpool.execute(task2).then(() => { 1433e41f4b71Sopenharmony_ci console.info("dependency: second task2 success"); 1434e41f4b71Sopenharmony_ci}) 1435e41f4b71Sopenharmony_citaskpool.execute(task3).then(() => { 1436e41f4b71Sopenharmony_ci console.info("dependency: second task3 success"); 1437e41f4b71Sopenharmony_ci}) 1438e41f4b71Sopenharmony_ci``` 1439e41f4b71Sopenharmony_ci 1440e41f4b71Sopenharmony_ci### removeDependency<sup>11+</sup> 1441e41f4b71Sopenharmony_ci 1442e41f4b71Sopenharmony_ciremoveDependency(...tasks: Task[]): void 1443e41f4b71Sopenharmony_ci 1444e41f4b71Sopenharmony_ciRemoves dependent tasks for this task. Before using this API, you must create a **Task** instance. 1445e41f4b71Sopenharmony_ci 1446e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 1447e41f4b71Sopenharmony_ci 1448e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 1449e41f4b71Sopenharmony_ci 1450e41f4b71Sopenharmony_ci**Parameters** 1451e41f4b71Sopenharmony_ci 1452e41f4b71Sopenharmony_ci| Name| Type | Mandatory| Description | 1453e41f4b71Sopenharmony_ci| ------ | ------ | ---- | ------------------ | 1454e41f4b71Sopenharmony_ci| tasks | [Task](#task)[] | No | Array of tasks on which the current task depends. The default value is **undefined**.| 1455e41f4b71Sopenharmony_ci 1456e41f4b71Sopenharmony_ci**Error codes** 1457e41f4b71Sopenharmony_ci 1458e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 1459e41f4b71Sopenharmony_ci 1460e41f4b71Sopenharmony_ci| ID| Error Message | 1461e41f4b71Sopenharmony_ci| -------- | ------------------------------ | 1462e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 1463e41f4b71Sopenharmony_ci| 10200027 | The dependency does not exist. | 1464e41f4b71Sopenharmony_ci| 10200052 | The periodic task cannot have a dependency. | 1465e41f4b71Sopenharmony_ci 1466e41f4b71Sopenharmony_ci**Example** 1467e41f4b71Sopenharmony_ci 1468e41f4b71Sopenharmony_ci```ts 1469e41f4b71Sopenharmony_ci@Concurrent 1470e41f4b71Sopenharmony_cifunction delay(args: number): number { 1471e41f4b71Sopenharmony_ci let t: number = Date.now(); 1472e41f4b71Sopenharmony_ci while ((Date.now() - t) < 1000) { 1473e41f4b71Sopenharmony_ci continue; 1474e41f4b71Sopenharmony_ci } 1475e41f4b71Sopenharmony_ci return args; 1476e41f4b71Sopenharmony_ci} 1477e41f4b71Sopenharmony_ci 1478e41f4b71Sopenharmony_cilet task1:taskpool.Task = new taskpool.Task(delay, 100); 1479e41f4b71Sopenharmony_cilet task2:taskpool.Task = new taskpool.Task(delay, 200); 1480e41f4b71Sopenharmony_cilet task3:taskpool.Task = new taskpool.Task(delay, 200); 1481e41f4b71Sopenharmony_ci 1482e41f4b71Sopenharmony_ciconsole.info("dependency: add dependency start"); 1483e41f4b71Sopenharmony_citask1.addDependency(task2); 1484e41f4b71Sopenharmony_citask2.addDependency(task3); 1485e41f4b71Sopenharmony_ciconsole.info("dependency: add dependency end"); 1486e41f4b71Sopenharmony_ciconsole.info("dependency: remove dependency start"); 1487e41f4b71Sopenharmony_citask1.removeDependency(task2); 1488e41f4b71Sopenharmony_citask2.removeDependency(task3); 1489e41f4b71Sopenharmony_ciconsole.info("dependency: remove dependency end"); 1490e41f4b71Sopenharmony_ci 1491e41f4b71Sopenharmony_ciconsole.info("dependency: start execute") 1492e41f4b71Sopenharmony_citaskpool.execute(task1).then(() => { 1493e41f4b71Sopenharmony_ci console.info("dependency: task1 success"); 1494e41f4b71Sopenharmony_ci}) 1495e41f4b71Sopenharmony_citaskpool.execute(task2).then(() => { 1496e41f4b71Sopenharmony_ci console.info("dependency: task2 success"); 1497e41f4b71Sopenharmony_ci}) 1498e41f4b71Sopenharmony_citaskpool.execute(task3).then(() => { 1499e41f4b71Sopenharmony_ci console.info("dependency: task3 success"); 1500e41f4b71Sopenharmony_ci}) 1501e41f4b71Sopenharmony_ci``` 1502e41f4b71Sopenharmony_ci 1503e41f4b71Sopenharmony_ci 1504e41f4b71Sopenharmony_ci### onEnqueued<sup>12+</sup> 1505e41f4b71Sopenharmony_ci 1506e41f4b71Sopenharmony_cionEnqueued(callback: CallbackFunction): void 1507e41f4b71Sopenharmony_ci 1508e41f4b71Sopenharmony_ciRegisters a callback function and calls it when a task is enqueued. The registration must be carried out before the task is executed. Otherwise, an exception is thrown. 1509e41f4b71Sopenharmony_ci 1510e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 1511e41f4b71Sopenharmony_ci 1512e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 12. 1513e41f4b71Sopenharmony_ci 1514e41f4b71Sopenharmony_ci**Parameters** 1515e41f4b71Sopenharmony_ci 1516e41f4b71Sopenharmony_ci| Name| Type | Mandatory| Description | 1517e41f4b71Sopenharmony_ci| ------ | ------ | ---- | ------------------ | 1518e41f4b71Sopenharmony_ci| callback | [CallbackFunction](#callbackfunction12) | Yes | Callback function to register.| 1519e41f4b71Sopenharmony_ci 1520e41f4b71Sopenharmony_ci**Error codes** 1521e41f4b71Sopenharmony_ci 1522e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 1523e41f4b71Sopenharmony_ci 1524e41f4b71Sopenharmony_ci| ID| Error Message | 1525e41f4b71Sopenharmony_ci| -------- | ------------------------------ | 1526e41f4b71Sopenharmony_ci| 401 | The input parameters are invalid. | 1527e41f4b71Sopenharmony_ci| 10200034 | The executed task does not support the registration of listeners. | 1528e41f4b71Sopenharmony_ci 1529e41f4b71Sopenharmony_ci**Example** 1530e41f4b71Sopenharmony_ci 1531e41f4b71Sopenharmony_ci```ts 1532e41f4b71Sopenharmony_ciimport { taskpool } from '@kit.ArkTS' 1533e41f4b71Sopenharmony_ci 1534e41f4b71Sopenharmony_ci@Concurrent 1535e41f4b71Sopenharmony_cifunction delay(args: number): number { 1536e41f4b71Sopenharmony_ci let t: number = Date.now(); 1537e41f4b71Sopenharmony_ci while ((Date.now() - t) < 1000) { 1538e41f4b71Sopenharmony_ci continue; 1539e41f4b71Sopenharmony_ci } 1540e41f4b71Sopenharmony_ci return args; 1541e41f4b71Sopenharmony_ci} 1542e41f4b71Sopenharmony_ci 1543e41f4b71Sopenharmony_cilet task: taskpool.Task = new taskpool.Task(delay, 1); 1544e41f4b71Sopenharmony_citask.onEnqueued(()=>{ 1545e41f4b71Sopenharmony_ci console.info("taskpool: onEnqueued") 1546e41f4b71Sopenharmony_ci}); 1547e41f4b71Sopenharmony_citaskpool.execute(task).then(()=> { 1548e41f4b71Sopenharmony_ci console.info("taskpool: execute task success") 1549e41f4b71Sopenharmony_ci}); 1550e41f4b71Sopenharmony_ci``` 1551e41f4b71Sopenharmony_ci 1552e41f4b71Sopenharmony_ci 1553e41f4b71Sopenharmony_ci### onStartExecution<sup>12+</sup> 1554e41f4b71Sopenharmony_ci 1555e41f4b71Sopenharmony_cionStartExecution(callback: CallbackFunction): void 1556e41f4b71Sopenharmony_ci 1557e41f4b71Sopenharmony_ciRegisters a callback function and calls it when the execution of a task starts. The registration must be carried out before the task is executed. Otherwise, an exception is thrown. 1558e41f4b71Sopenharmony_ci 1559e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 1560e41f4b71Sopenharmony_ci 1561e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 12. 1562e41f4b71Sopenharmony_ci 1563e41f4b71Sopenharmony_ci**Parameters** 1564e41f4b71Sopenharmony_ci 1565e41f4b71Sopenharmony_ci| Name| Type | Mandatory| Description | 1566e41f4b71Sopenharmony_ci| ------ | ------ | ---- | ------------------ | 1567e41f4b71Sopenharmony_ci| callback | [CallbackFunction](#callbackfunction12) | Yes | Callback function to register.| 1568e41f4b71Sopenharmony_ci 1569e41f4b71Sopenharmony_ci**Error codes** 1570e41f4b71Sopenharmony_ci 1571e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 1572e41f4b71Sopenharmony_ci 1573e41f4b71Sopenharmony_ci| ID| Error Message | 1574e41f4b71Sopenharmony_ci| -------- | ------------------------------ | 1575e41f4b71Sopenharmony_ci| 401 | The input parameters are invalid. | 1576e41f4b71Sopenharmony_ci| 10200034 | The executed task does not support the registration of listeners. | 1577e41f4b71Sopenharmony_ci 1578e41f4b71Sopenharmony_ci**Example** 1579e41f4b71Sopenharmony_ci 1580e41f4b71Sopenharmony_ci```ts 1581e41f4b71Sopenharmony_ciimport { taskpool } from '@kit.ArkTS' 1582e41f4b71Sopenharmony_ci 1583e41f4b71Sopenharmony_ci@Concurrent 1584e41f4b71Sopenharmony_cifunction delay(args: number): number { 1585e41f4b71Sopenharmony_ci let t: number = Date.now(); 1586e41f4b71Sopenharmony_ci while ((Date.now() - t) < 1000) { 1587e41f4b71Sopenharmony_ci continue; 1588e41f4b71Sopenharmony_ci } 1589e41f4b71Sopenharmony_ci return args; 1590e41f4b71Sopenharmony_ci} 1591e41f4b71Sopenharmony_ci 1592e41f4b71Sopenharmony_cilet task: taskpool.Task = new taskpool.Task(delay, 1); 1593e41f4b71Sopenharmony_citask.onStartExecution(()=>{ 1594e41f4b71Sopenharmony_ci console.info("taskpool: onStartExecution") 1595e41f4b71Sopenharmony_ci}); 1596e41f4b71Sopenharmony_citaskpool.execute(task).then(()=> { 1597e41f4b71Sopenharmony_ci console.info("taskpool: execute task success") 1598e41f4b71Sopenharmony_ci}); 1599e41f4b71Sopenharmony_ci``` 1600e41f4b71Sopenharmony_ci 1601e41f4b71Sopenharmony_ci### onExecutionFailed<sup>12+</sup> 1602e41f4b71Sopenharmony_ci 1603e41f4b71Sopenharmony_cionExecutionFailed(callback: CallbackFunctionWithError): void 1604e41f4b71Sopenharmony_ci 1605e41f4b71Sopenharmony_ciRegisters a callback function and calls it when a task fails to be enqueued. The registration must be carried out before the task is executed. Otherwise, an exception is thrown. 1606e41f4b71Sopenharmony_ci 1607e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 1608e41f4b71Sopenharmony_ci 1609e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 12. 1610e41f4b71Sopenharmony_ci 1611e41f4b71Sopenharmony_ci**Parameters** 1612e41f4b71Sopenharmony_ci 1613e41f4b71Sopenharmony_ci| Name| Type | Mandatory| Description | 1614e41f4b71Sopenharmony_ci| ------ | ------ | ---- | ------------------ | 1615e41f4b71Sopenharmony_ci| callback | [CallbackFunctionWithError](#callbackfunctionwitherror12) | Yes | Callback function to register.| 1616e41f4b71Sopenharmony_ci 1617e41f4b71Sopenharmony_ci**Error codes** 1618e41f4b71Sopenharmony_ci 1619e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 1620e41f4b71Sopenharmony_ci 1621e41f4b71Sopenharmony_ci| ID| Error Message | 1622e41f4b71Sopenharmony_ci| -------- | ------------------------------ | 1623e41f4b71Sopenharmony_ci| 401 | The input parameters are invalid. | 1624e41f4b71Sopenharmony_ci| 10200034 | The executed task does not support the registration of listeners. | 1625e41f4b71Sopenharmony_ci 1626e41f4b71Sopenharmony_ci**Example** 1627e41f4b71Sopenharmony_ci 1628e41f4b71Sopenharmony_ci```ts 1629e41f4b71Sopenharmony_ciimport { taskpool } from '@kit.ArkTS' 1630e41f4b71Sopenharmony_ciimport { BusinessError } from '@kit.BasicServicesKit' 1631e41f4b71Sopenharmony_ciimport { HashMap } from '@kit.ArkTS' 1632e41f4b71Sopenharmony_ci 1633e41f4b71Sopenharmony_ci@Concurrent 1634e41f4b71Sopenharmony_cifunction test(args:number) { 1635e41f4b71Sopenharmony_ci let t = Date.now() 1636e41f4b71Sopenharmony_ci while ((Date.now() - t) < 100) { 1637e41f4b71Sopenharmony_ci continue; 1638e41f4b71Sopenharmony_ci } 1639e41f4b71Sopenharmony_ci let hashMap1: HashMap<string, number> = new HashMap(); 1640e41f4b71Sopenharmony_ci hashMap1.set('a', args); 1641e41f4b71Sopenharmony_ci return hashMap1; 1642e41f4b71Sopenharmony_ci} 1643e41f4b71Sopenharmony_ci 1644e41f4b71Sopenharmony_cilet task2 = new taskpool.Task(test, 1); 1645e41f4b71Sopenharmony_citask2.onExecutionFailed((e:Error)=>{ 1646e41f4b71Sopenharmony_ci console.info("taskpool: onExecutionFailed error is " + e); 1647e41f4b71Sopenharmony_ci}) 1648e41f4b71Sopenharmony_citaskpool.execute(task2).then(()=>{ 1649e41f4b71Sopenharmony_ci console.info("taskpool: execute task success") 1650e41f4b71Sopenharmony_ci}).catch((e:BusinessError)=>{ 1651e41f4b71Sopenharmony_ci console.error(`taskpool: error code: ${e.code}, error info: ${e.message}`); 1652e41f4b71Sopenharmony_ci}) 1653e41f4b71Sopenharmony_ci``` 1654e41f4b71Sopenharmony_ci 1655e41f4b71Sopenharmony_ci### onExecutionSucceeded<sup>12+</sup> 1656e41f4b71Sopenharmony_ci 1657e41f4b71Sopenharmony_cionExecutionSucceeded(callback: CallbackFunction): void 1658e41f4b71Sopenharmony_ci 1659e41f4b71Sopenharmony_ciRegisters a callback function and calls it when a task is executed successfully. The registration must be carried out before the task is executed. Otherwise, an exception is thrown. 1660e41f4b71Sopenharmony_ci 1661e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 1662e41f4b71Sopenharmony_ci 1663e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 12. 1664e41f4b71Sopenharmony_ci 1665e41f4b71Sopenharmony_ci**Parameters** 1666e41f4b71Sopenharmony_ci 1667e41f4b71Sopenharmony_ci| Name| Type | Mandatory| Description | 1668e41f4b71Sopenharmony_ci| ------ | ------ | ---- | ------------------ | 1669e41f4b71Sopenharmony_ci| callback | [CallbackFunction](#callbackfunction12) | Yes | Callback function to register.| 1670e41f4b71Sopenharmony_ci 1671e41f4b71Sopenharmony_ci**Error codes** 1672e41f4b71Sopenharmony_ci 1673e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 1674e41f4b71Sopenharmony_ci 1675e41f4b71Sopenharmony_ci| ID| Error Message | 1676e41f4b71Sopenharmony_ci| -------- | ------------------------------ | 1677e41f4b71Sopenharmony_ci| 401 | The input parameters are invalid. | 1678e41f4b71Sopenharmony_ci| 10200034 | The executed task does not support the registration of listeners. | 1679e41f4b71Sopenharmony_ci 1680e41f4b71Sopenharmony_ci**Example** 1681e41f4b71Sopenharmony_ci 1682e41f4b71Sopenharmony_ci```ts 1683e41f4b71Sopenharmony_ciimport { taskpool } from '@kit.ArkTS' 1684e41f4b71Sopenharmony_ci 1685e41f4b71Sopenharmony_ci@Concurrent 1686e41f4b71Sopenharmony_cifunction delay(args: number): number { 1687e41f4b71Sopenharmony_ci let t: number = Date.now(); 1688e41f4b71Sopenharmony_ci while ((Date.now() - t) < 1000) { 1689e41f4b71Sopenharmony_ci continue; 1690e41f4b71Sopenharmony_ci } 1691e41f4b71Sopenharmony_ci return args; 1692e41f4b71Sopenharmony_ci} 1693e41f4b71Sopenharmony_ci 1694e41f4b71Sopenharmony_cilet task: taskpool.Task = new taskpool.Task(delay, 1); 1695e41f4b71Sopenharmony_citask.onExecutionSucceeded(()=>{ 1696e41f4b71Sopenharmony_ci console.info("taskpool: onExecutionSucceeded") 1697e41f4b71Sopenharmony_ci}); 1698e41f4b71Sopenharmony_citaskpool.execute(task).then(()=> { 1699e41f4b71Sopenharmony_ci console.info("taskpool: execute task success") 1700e41f4b71Sopenharmony_ci}); 1701e41f4b71Sopenharmony_ci``` 1702e41f4b71Sopenharmony_ci 1703e41f4b71Sopenharmony_ci### isDone<sup>12+</sup> 1704e41f4b71Sopenharmony_ci 1705e41f4b71Sopenharmony_ciisDone(): boolean 1706e41f4b71Sopenharmony_ci 1707e41f4b71Sopenharmony_ciChecks whether the task is complete. 1708e41f4b71Sopenharmony_ci 1709e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 1710e41f4b71Sopenharmony_ci 1711e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 12. 1712e41f4b71Sopenharmony_ci 1713e41f4b71Sopenharmony_ci**Return value** 1714e41f4b71Sopenharmony_ci 1715e41f4b71Sopenharmony_ci| Type | Description | 1716e41f4b71Sopenharmony_ci| ------- | ------------------------------------ | 1717e41f4b71Sopenharmony_ci| boolean | **true**: The task is complete.<br>**false**: The task is not complete.| 1718e41f4b71Sopenharmony_ci 1719e41f4b71Sopenharmony_ci**Example** 1720e41f4b71Sopenharmony_ci 1721e41f4b71Sopenharmony_ci```ts 1722e41f4b71Sopenharmony_ci@Concurrent 1723e41f4b71Sopenharmony_cifunction inspectStatus(arg: number): number { 1724e41f4b71Sopenharmony_ci // 2s sleep 1725e41f4b71Sopenharmony_ci let t: number = Date.now(); 1726e41f4b71Sopenharmony_ci while (Date.now() - t < 1000) { 1727e41f4b71Sopenharmony_ci continue; 1728e41f4b71Sopenharmony_ci } 1729e41f4b71Sopenharmony_ci return arg + 1; 1730e41f4b71Sopenharmony_ci} 1731e41f4b71Sopenharmony_ci 1732e41f4b71Sopenharmony_ciasync function taskpoolCancel(): Promise<void> { 1733e41f4b71Sopenharmony_ci let task: taskpool.Task = new taskpool.Task(inspectStatus, 100); // 100: test number 1734e41f4b71Sopenharmony_ci taskpool.execute(task).then((res: Object)=>{ 1735e41f4b71Sopenharmony_ci console.info("taskpool test result: " + res); 1736e41f4b71Sopenharmony_ci }).catch((err: string) => { 1737e41f4b71Sopenharmony_ci console.error("taskpool test occur error: " + err); 1738e41f4b71Sopenharmony_ci }); 1739e41f4b71Sopenharmony_ci 1740e41f4b71Sopenharmony_ci setTimeout(()=>{ 1741e41f4b71Sopenharmony_ci if (!task.isDone()) { 1742e41f4b71Sopenharmony_ci taskpool.cancel(task); 1743e41f4b71Sopenharmony_ci } 1744e41f4b71Sopenharmony_ci }, 3000); // Wait for 3s to ensure that the task has been executed. 1745e41f4b71Sopenharmony_ci} 1746e41f4b71Sopenharmony_ci 1747e41f4b71Sopenharmony_citaskpoolCancel(); 1748e41f4b71Sopenharmony_ci``` 1749e41f4b71Sopenharmony_ci 1750e41f4b71Sopenharmony_ci## CallbackFunction<sup>12+</sup> 1751e41f4b71Sopenharmony_ci 1752e41f4b71Sopenharmony_citype CallbackFunction = () => void 1753e41f4b71Sopenharmony_ci 1754e41f4b71Sopenharmony_ciDescribes a callback function. 1755e41f4b71Sopenharmony_ci 1756e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 1757e41f4b71Sopenharmony_ci 1758e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 12. 1759e41f4b71Sopenharmony_ci 1760e41f4b71Sopenharmony_ci 1761e41f4b71Sopenharmony_ci## CallbackFunctionWithError<sup>12+</sup> 1762e41f4b71Sopenharmony_ci 1763e41f4b71Sopenharmony_citype CallbackFunctionWithError = (e: Error) => void 1764e41f4b71Sopenharmony_ci 1765e41f4b71Sopenharmony_ciDescribes a callback function with an error message. 1766e41f4b71Sopenharmony_ci 1767e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 1768e41f4b71Sopenharmony_ci 1769e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 12. 1770e41f4b71Sopenharmony_ci**Parameters** 1771e41f4b71Sopenharmony_ci 1772e41f4b71Sopenharmony_ci| Name| Type | Mandatory| Description | 1773e41f4b71Sopenharmony_ci| ------ | ------ | ---- | ------------------ | 1774e41f4b71Sopenharmony_ci| e | Error | Yes | Error message.| 1775e41f4b71Sopenharmony_ci 1776e41f4b71Sopenharmony_ci 1777e41f4b71Sopenharmony_ci## LongTask<sup>12+</sup> 1778e41f4b71Sopenharmony_ci 1779e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 1780e41f4b71Sopenharmony_ci 1781e41f4b71Sopenharmony_ciDescribes a continuous task. **LongTask** inherits from [Task](#task). 1782e41f4b71Sopenharmony_ciNo upper limit is set for the execution time of a continuous task, and no timeout exception is thrown if a continuous task runs for a long period of time. However, a continuous task cannot be executed in a task group or executed for multiple times. 1783e41f4b71Sopenharmony_ciThe thread for executing a continuous task exists until [terminateTask](#taskpoolterminatetask12) is called after the execution is complete. The thread is reclaimed when it is idle. 1784e41f4b71Sopenharmony_ci 1785e41f4b71Sopenharmony_ci**Example** 1786e41f4b71Sopenharmony_ci 1787e41f4b71Sopenharmony_ci```ts 1788e41f4b71Sopenharmony_ci@Concurrent 1789e41f4b71Sopenharmony_cifunction printArgs(args: string): string { 1790e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 1791e41f4b71Sopenharmony_ci return args; 1792e41f4b71Sopenharmony_ci} 1793e41f4b71Sopenharmony_ci 1794e41f4b71Sopenharmony_cilet task: taskpool.LongTask = new taskpool.LongTask(printArgs, "this is my first LongTask"); 1795e41f4b71Sopenharmony_ci``` 1796e41f4b71Sopenharmony_ci 1797e41f4b71Sopenharmony_ci 1798e41f4b71Sopenharmony_ci## GenericsTask<sup>13+</sup> 1799e41f4b71Sopenharmony_ci 1800e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 1801e41f4b71Sopenharmony_ci 1802e41f4b71Sopenharmony_ciImplements a generic task. **GenericsTask** inherits from [Task](#task). 1803e41f4b71Sopenharmony_ci 1804e41f4b71Sopenharmony_ciDuring the creation of a generic task, the passed-in parameter types and return value types of concurrent functions are verified in the compilation phase. Other behaviors are the same as those during the creation of a task. 1805e41f4b71Sopenharmony_ci 1806e41f4b71Sopenharmony_ci### constructor<sup>13+</sup> 1807e41f4b71Sopenharmony_ci 1808e41f4b71Sopenharmony_ciconstructor(func: (...args: A) => R | Promise\<R>, ...args: A) 1809e41f4b71Sopenharmony_ci 1810e41f4b71Sopenharmony_ciA constructor used to create a **GenericsTask** object. 1811e41f4b71Sopenharmony_ci 1812e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 1813e41f4b71Sopenharmony_ci 1814e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 13. 1815e41f4b71Sopenharmony_ci 1816e41f4b71Sopenharmony_ci**Parameters** 1817e41f4b71Sopenharmony_ci 1818e41f4b71Sopenharmony_ci| Name| Type | Mandatory| Description | 1819e41f4b71Sopenharmony_ci| ------ | --------- | ---- | -------------------------------------------------------------------- | 1820e41f4b71Sopenharmony_ci| func | (...args: A) => R \| Promise\<R> | Yes | Function to be executed. The function must be decorated using [@Concurrent decorator](../../arkts-utils/arkts-concurrent.md). For details about the supported return value types of the function, see [Sequenceable Data Types](#sequenceable-data-types). | 1821e41f4b71Sopenharmony_ci| args | A | No | Arguments of the function. For details about the supported parameter types, see [Sequenceable Data Types](#sequenceable-data-types). The default value is **undefined**.| 1822e41f4b71Sopenharmony_ci 1823e41f4b71Sopenharmony_ci**Error codes** 1824e41f4b71Sopenharmony_ci 1825e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 1826e41f4b71Sopenharmony_ci 1827e41f4b71Sopenharmony_ci| ID| Error Message | 1828e41f4b71Sopenharmony_ci| -------- | --------------------------------------- | 1829e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1.Incorrect parameter types; 2.Parameter verification failed. | 1830e41f4b71Sopenharmony_ci| 10200014 | The function is not marked as concurrent. | 1831e41f4b71Sopenharmony_ci 1832e41f4b71Sopenharmony_ci**Example** 1833e41f4b71Sopenharmony_ci 1834e41f4b71Sopenharmony_ci```ts 1835e41f4b71Sopenharmony_ci@Concurrent 1836e41f4b71Sopenharmony_cifunction printArgs(args: string): string { 1837e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 1838e41f4b71Sopenharmony_ci return args; 1839e41f4b71Sopenharmony_ci} 1840e41f4b71Sopenharmony_ci 1841e41f4b71Sopenharmony_ci@Concurrent 1842e41f4b71Sopenharmony_cifunction testWithThreeParams(a: number, b: string, c: number): string { 1843e41f4b71Sopenharmony_ci return b; 1844e41f4b71Sopenharmony_ci} 1845e41f4b71Sopenharmony_ci 1846e41f4b71Sopenharmony_ci@Concurrent 1847e41f4b71Sopenharmony_cifunction testWithArray(args: [number, string]): string { 1848e41f4b71Sopenharmony_ci return "success"; 1849e41f4b71Sopenharmony_ci} 1850e41f4b71Sopenharmony_ci 1851e41f4b71Sopenharmony_cilet task1: taskpool.Task = new taskpool.GenericsTask<[string], string>(printArgs, "this is my first LongTask"); 1852e41f4b71Sopenharmony_ci 1853e41f4b71Sopenharmony_cilet task2: taskpool.Task = new taskpool.GenericsTask<[number, string, number], string>(testWithThreeParams, 100, "test", 100); 1854e41f4b71Sopenharmony_ci 1855e41f4b71Sopenharmony_cilet task3: taskpool.Task = new taskpool.GenericsTask<[[number, string]], string>(testWithArray, [100, "test"]); 1856e41f4b71Sopenharmony_ci``` 1857e41f4b71Sopenharmony_ci 1858e41f4b71Sopenharmony_ci### constructor<sup>13+</sup> 1859e41f4b71Sopenharmony_ci 1860e41f4b71Sopenharmony_ciconstructor(name: string, func: (...args: A) => R | Promise\<R>, ...args: A) 1861e41f4b71Sopenharmony_ci 1862e41f4b71Sopenharmony_ciA constructor used to create a **GenericsTask** instance, with the task name specified. 1863e41f4b71Sopenharmony_ci 1864e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 1865e41f4b71Sopenharmony_ci 1866e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 13. 1867e41f4b71Sopenharmony_ci 1868e41f4b71Sopenharmony_ci**Parameters** 1869e41f4b71Sopenharmony_ci 1870e41f4b71Sopenharmony_ci| Name| Type | Mandatory| Description | 1871e41f4b71Sopenharmony_ci| ------ | -------- | ---- | ------------------------------------------------------------ | 1872e41f4b71Sopenharmony_ci| name | string | Yes | Name of the generic task. | 1873e41f4b71Sopenharmony_ci| func | (...args: A) => R \| Promise\<R> | Yes | Function to be executed. The function must be decorated using [@Concurrent decorator](../../arkts-utils/arkts-concurrent.md). For details about the supported return value types of the function, see [Sequenceable Data Types](#sequenceable-data-types). | 1874e41f4b71Sopenharmony_ci| args | A | No | Arguments of the function. For details about the supported parameter types, see [Sequenceable Data Types](#sequenceable-data-types). The default value is **undefined**.| 1875e41f4b71Sopenharmony_ci 1876e41f4b71Sopenharmony_ci**Error codes** 1877e41f4b71Sopenharmony_ci 1878e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 1879e41f4b71Sopenharmony_ci 1880e41f4b71Sopenharmony_ci| ID| Error Message | 1881e41f4b71Sopenharmony_ci| -------- | --------------------------------------- | 1882e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1.Incorrect parameter types; 2.Parameter verification failed. | 1883e41f4b71Sopenharmony_ci| 10200014 | The function is not marked as concurrent. | 1884e41f4b71Sopenharmony_ci 1885e41f4b71Sopenharmony_ci**Example** 1886e41f4b71Sopenharmony_ci 1887e41f4b71Sopenharmony_ci```ts 1888e41f4b71Sopenharmony_ci@Concurrent 1889e41f4b71Sopenharmony_cifunction printArgs(args: string): string { 1890e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 1891e41f4b71Sopenharmony_ci return args; 1892e41f4b71Sopenharmony_ci} 1893e41f4b71Sopenharmony_ci 1894e41f4b71Sopenharmony_cilet taskName: string = "taskName"; 1895e41f4b71Sopenharmony_cilet task: taskpool.Task = new taskpool.GenericsTask<[string], string>(taskName, printArgs, "this is my first Task"); 1896e41f4b71Sopenharmony_cilet name: string = task.name; 1897e41f4b71Sopenharmony_ci``` 1898e41f4b71Sopenharmony_ci 1899e41f4b71Sopenharmony_ci## TaskGroup<sup>10+</sup> 1900e41f4b71Sopenharmony_ci 1901e41f4b71Sopenharmony_ciImplements a task group, in which tasks are associated with each other and all tasks are executed at a time. If all the tasks are executed normally, an array of task results is returned asynchronously, and the sequence of elements in the array is the same as the sequence of tasks added by calling [addTask](#addtask10-1). If any task fails, the corresponding exception is thrown. A task group can be executed for multiple times, but no task can be added after the task group is executed. Before calling any APIs in **TaskGroup**, you must use [constructor](#constructor10) to create a **TaskGroup** instance. 1902e41f4b71Sopenharmony_ci 1903e41f4b71Sopenharmony_ci### constructor<sup>10+</sup> 1904e41f4b71Sopenharmony_ci 1905e41f4b71Sopenharmony_ciconstructor() 1906e41f4b71Sopenharmony_ci 1907e41f4b71Sopenharmony_ciConstructor used to create a **TaskGroup** instance. 1908e41f4b71Sopenharmony_ci 1909e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 1910e41f4b71Sopenharmony_ci 1911e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 1912e41f4b71Sopenharmony_ci 1913e41f4b71Sopenharmony_ci**Example** 1914e41f4b71Sopenharmony_ci 1915e41f4b71Sopenharmony_ci```ts 1916e41f4b71Sopenharmony_cilet taskGroup = new taskpool.TaskGroup(); 1917e41f4b71Sopenharmony_ci``` 1918e41f4b71Sopenharmony_ci 1919e41f4b71Sopenharmony_ci### constructor<sup>11+</sup> 1920e41f4b71Sopenharmony_ci 1921e41f4b71Sopenharmony_ciconstructor(name: string) 1922e41f4b71Sopenharmony_ci 1923e41f4b71Sopenharmony_ciA constructor used to create a **TaskGroup** instance, with the task group name specified. 1924e41f4b71Sopenharmony_ci 1925e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 1926e41f4b71Sopenharmony_ci 1927e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 1928e41f4b71Sopenharmony_ci 1929e41f4b71Sopenharmony_ci**Parameters** 1930e41f4b71Sopenharmony_ci 1931e41f4b71Sopenharmony_ci| Name| Type | Mandatory| Description | 1932e41f4b71Sopenharmony_ci| ------ | ------ | ---- | ------------ | 1933e41f4b71Sopenharmony_ci| name | string | Yes | Task group name.| 1934e41f4b71Sopenharmony_ci 1935e41f4b71Sopenharmony_ci**Error codes** 1936e41f4b71Sopenharmony_ci 1937e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md). 1938e41f4b71Sopenharmony_ci 1939e41f4b71Sopenharmony_ci| ID| Error Message| 1940e41f4b71Sopenharmony_ci| -------- | -------- | 1941e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 1942e41f4b71Sopenharmony_ci 1943e41f4b71Sopenharmony_ci**Example** 1944e41f4b71Sopenharmony_ci 1945e41f4b71Sopenharmony_ci```ts 1946e41f4b71Sopenharmony_cilet taskGroupName: string = "groupName"; 1947e41f4b71Sopenharmony_cilet taskGroup: taskpool.TaskGroup = new taskpool.TaskGroup(taskGroupName); 1948e41f4b71Sopenharmony_cilet name: string = taskGroup.name; 1949e41f4b71Sopenharmony_ci``` 1950e41f4b71Sopenharmony_ci 1951e41f4b71Sopenharmony_ci### addTask<sup>10+</sup> 1952e41f4b71Sopenharmony_ci 1953e41f4b71Sopenharmony_ciaddTask(func: Function, ...args: Object[]): void 1954e41f4b71Sopenharmony_ci 1955e41f4b71Sopenharmony_ciAdds the function to be executed to this task group. Before using this API, you must create a **TaskGroup** instance. 1956e41f4b71Sopenharmony_ci 1957e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 1958e41f4b71Sopenharmony_ci 1959e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 1960e41f4b71Sopenharmony_ci 1961e41f4b71Sopenharmony_ci**Parameters** 1962e41f4b71Sopenharmony_ci 1963e41f4b71Sopenharmony_ci| Name| Type | Mandatory| Description | 1964e41f4b71Sopenharmony_ci| ------ | --------- | ---- | ---------------------------------------------------------------------- | 1965e41f4b71Sopenharmony_ci| func | Function | Yes | Function to be executed. The function must be decorated using [@Concurrent decorator](../../arkts-utils/arkts-concurrent.md). For details about the supported return value types of the function, see [Sequenceable Data Types](#sequenceable-data-types). | 1966e41f4b71Sopenharmony_ci| args | Object[] | No | Arguments of the function. For details about the supported parameter types, see [Sequenceable Data Types](#sequenceable-data-types). The default value is **undefined**.| 1967e41f4b71Sopenharmony_ci 1968e41f4b71Sopenharmony_ci**Error codes** 1969e41f4b71Sopenharmony_ci 1970e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 1971e41f4b71Sopenharmony_ci 1972e41f4b71Sopenharmony_ci| ID| Error Message | 1973e41f4b71Sopenharmony_ci| -------- | --------------------------------------- | 1974e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 1975e41f4b71Sopenharmony_ci| 10200014 | The function is not marked as concurrent. | 1976e41f4b71Sopenharmony_ci 1977e41f4b71Sopenharmony_ci**Example** 1978e41f4b71Sopenharmony_ci 1979e41f4b71Sopenharmony_ci```ts 1980e41f4b71Sopenharmony_ci@Concurrent 1981e41f4b71Sopenharmony_cifunction printArgs(args: number): number { 1982e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 1983e41f4b71Sopenharmony_ci return args; 1984e41f4b71Sopenharmony_ci} 1985e41f4b71Sopenharmony_ci 1986e41f4b71Sopenharmony_cilet taskGroup: taskpool.TaskGroup = new taskpool.TaskGroup(); 1987e41f4b71Sopenharmony_citaskGroup.addTask(printArgs, 100); // 100: test number 1988e41f4b71Sopenharmony_ci``` 1989e41f4b71Sopenharmony_ci 1990e41f4b71Sopenharmony_ci### addTask<sup>10+</sup> 1991e41f4b71Sopenharmony_ci 1992e41f4b71Sopenharmony_ciaddTask(task: Task): void 1993e41f4b71Sopenharmony_ci 1994e41f4b71Sopenharmony_ciAdds a created task to this task group. Before using this API, you must create a **TaskGroup** instance. Tasks in another task group or queue, dependent tasks, continuous tasks, tasks that have been executed, and periodic tasks cannot be added to the task group. 1995e41f4b71Sopenharmony_ci 1996e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 1997e41f4b71Sopenharmony_ci 1998e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 1999e41f4b71Sopenharmony_ci 2000e41f4b71Sopenharmony_ci**Parameters** 2001e41f4b71Sopenharmony_ci 2002e41f4b71Sopenharmony_ci| Name | Type | Mandatory| Description | 2003e41f4b71Sopenharmony_ci| -------- | --------------------- | ---- | ---------------------------------------- | 2004e41f4b71Sopenharmony_ci| task | [Task](#task) | Yes | Task to be added to the task group. | 2005e41f4b71Sopenharmony_ci 2006e41f4b71Sopenharmony_ci**Error codes** 2007e41f4b71Sopenharmony_ci 2008e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 2009e41f4b71Sopenharmony_ci 2010e41f4b71Sopenharmony_ci| ID| Error Message | 2011e41f4b71Sopenharmony_ci| -------- | --------------------------------------- | 2012e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 2013e41f4b71Sopenharmony_ci| 10200014 | The function is not marked as concurrent. | 2014e41f4b71Sopenharmony_ci| 10200051 | The periodic task cannot be executed again. | 2015e41f4b71Sopenharmony_ci 2016e41f4b71Sopenharmony_ci**Example** 2017e41f4b71Sopenharmony_ci 2018e41f4b71Sopenharmony_ci```ts 2019e41f4b71Sopenharmony_ci@Concurrent 2020e41f4b71Sopenharmony_cifunction printArgs(args: number): number { 2021e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 2022e41f4b71Sopenharmony_ci return args; 2023e41f4b71Sopenharmony_ci} 2024e41f4b71Sopenharmony_ci 2025e41f4b71Sopenharmony_cilet taskGroup: taskpool.TaskGroup = new taskpool.TaskGroup(); 2026e41f4b71Sopenharmony_cilet task: taskpool.Task = new taskpool.Task(printArgs, 200); // 200: test number 2027e41f4b71Sopenharmony_citaskGroup.addTask(task); 2028e41f4b71Sopenharmony_ci``` 2029e41f4b71Sopenharmony_ci 2030e41f4b71Sopenharmony_ci### Attributes 2031e41f4b71Sopenharmony_ci 2032e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 2033e41f4b71Sopenharmony_ci 2034e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 2035e41f4b71Sopenharmony_ci 2036e41f4b71Sopenharmony_ci| Name| Type | Readable| Writable| Description | 2037e41f4b71Sopenharmony_ci| ---- | ------ | ---- | ---- | ---------------------------- | 2038e41f4b71Sopenharmony_ci| name<sup>11+</sup> | string | Yes | Yes | Name of the task group specified when the task group is created.| 2039e41f4b71Sopenharmony_ci 2040e41f4b71Sopenharmony_ci## SequenceRunner <sup>11+</sup> 2041e41f4b71Sopenharmony_ci 2042e41f4b71Sopenharmony_ciImplements a queue, in which all tasks are executed in sequence. Before calling any APIs in **SequenceRunner**, you must use [constructor](#constructor11-3) to create a **SequenceRunner** instance. 2043e41f4b71Sopenharmony_ci 2044e41f4b71Sopenharmony_ci### constructor<sup>11+</sup> 2045e41f4b71Sopenharmony_ci 2046e41f4b71Sopenharmony_ciconstructor(priority?: Priority) 2047e41f4b71Sopenharmony_ci 2048e41f4b71Sopenharmony_ciA constructor used to create a **SequenceRunner** instance. 2049e41f4b71Sopenharmony_ci 2050e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 2051e41f4b71Sopenharmony_ci 2052e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 2053e41f4b71Sopenharmony_ci 2054e41f4b71Sopenharmony_ci**Parameters** 2055e41f4b71Sopenharmony_ci 2056e41f4b71Sopenharmony_ci| Name | Type | Mandatory| Description | 2057e41f4b71Sopenharmony_ci| -------- | --------------------- | ---- | ---------------------------------------------------------- | 2058e41f4b71Sopenharmony_ci| priority | [Priority](#priority) | No | Priority of the task. The default value is **taskpool.Priority.MEDIUM**.| 2059e41f4b71Sopenharmony_ci 2060e41f4b71Sopenharmony_ci**Error codes** 2061e41f4b71Sopenharmony_ci 2062e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md). 2063e41f4b71Sopenharmony_ci 2064e41f4b71Sopenharmony_ci| ID| Error Message| 2065e41f4b71Sopenharmony_ci| -------- | -------- | 2066e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Incorrect parameter types; 2. Parameter verification failed. | 2067e41f4b71Sopenharmony_ci 2068e41f4b71Sopenharmony_ci**Example** 2069e41f4b71Sopenharmony_ci 2070e41f4b71Sopenharmony_ci```ts 2071e41f4b71Sopenharmony_cilet runner: taskpool.SequenceRunner = new taskpool.SequenceRunner(); 2072e41f4b71Sopenharmony_ci``` 2073e41f4b71Sopenharmony_ci 2074e41f4b71Sopenharmony_ci### constructor<sup>12+</sup> 2075e41f4b71Sopenharmony_ci 2076e41f4b71Sopenharmony_ciconstructor(name: string, priority?: Priority) 2077e41f4b71Sopenharmony_ci 2078e41f4b71Sopenharmony_ciA constructor used to create a **SequenceRunner** instance. This instance represents a global serial queue. If the passed-in name is the same as an existing name, the same serial queue is returned. 2079e41f4b71Sopenharmony_ci 2080e41f4b71Sopenharmony_ci> **NOTE** 2081e41f4b71Sopenharmony_ci> 2082e41f4b71Sopenharmony_ci> - The same queue cannot be created repeatedly in the same thread. 2083e41f4b71Sopenharmony_ci> - The priority of a queue cannot be modified. 2084e41f4b71Sopenharmony_ci 2085e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 2086e41f4b71Sopenharmony_ci 2087e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 12. 2088e41f4b71Sopenharmony_ci 2089e41f4b71Sopenharmony_ci**Parameters** 2090e41f4b71Sopenharmony_ci 2091e41f4b71Sopenharmony_ci| Name | Type | Mandatory| Description | 2092e41f4b71Sopenharmony_ci| -------- | --------------------- | ---- | ---------------------------------------------------------- | 2093e41f4b71Sopenharmony_ci| name | string | Yes | Name of a queue.| 2094e41f4b71Sopenharmony_ci| priority | [Priority](#priority) | No | Priority of the task. The default value is **taskpool.Priority.MEDIUM**.| 2095e41f4b71Sopenharmony_ci 2096e41f4b71Sopenharmony_ci**Error codes** 2097e41f4b71Sopenharmony_ci 2098e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md). 2099e41f4b71Sopenharmony_ci 2100e41f4b71Sopenharmony_ci| ID| Error Message| 2101e41f4b71Sopenharmony_ci| -------- | -------- | 2102e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 2103e41f4b71Sopenharmony_ci 2104e41f4b71Sopenharmony_ci**Example** 2105e41f4b71Sopenharmony_ci 2106e41f4b71Sopenharmony_ci```ts 2107e41f4b71Sopenharmony_cilet runner:taskpool.SequenceRunner = new taskpool.SequenceRunner("runner1", taskpool.Priority.LOW); 2108e41f4b71Sopenharmony_ci``` 2109e41f4b71Sopenharmony_ci 2110e41f4b71Sopenharmony_ci### execute<sup>11+</sup> 2111e41f4b71Sopenharmony_ci 2112e41f4b71Sopenharmony_ciexecute(task: Task): Promise\<Object> 2113e41f4b71Sopenharmony_ci 2114e41f4b71Sopenharmony_ciAdds a task to the queue for execution. Before using this API, you must create a **SequenceRunner** instance. Tasks in another task group or queue, dependent tasks, and tasks that have been executed cannot be added to the queue. 2115e41f4b71Sopenharmony_ci 2116e41f4b71Sopenharmony_ci> **NOTE** 2117e41f4b71Sopenharmony_ci> 2118e41f4b71Sopenharmony_ci> - Tasks that depend others cannot be added to the queue. 2119e41f4b71Sopenharmony_ci> - The failure or cancellation of a task does not affect the execution of subsequent tasks in the queue. 2120e41f4b71Sopenharmony_ci 2121e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 2122e41f4b71Sopenharmony_ci 2123e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 2124e41f4b71Sopenharmony_ci 2125e41f4b71Sopenharmony_ci**Parameters** 2126e41f4b71Sopenharmony_ci 2127e41f4b71Sopenharmony_ci| Name| Type | Mandatory| Description | 2128e41f4b71Sopenharmony_ci| ------ | ------------- | ---- | -------------------------------- | 2129e41f4b71Sopenharmony_ci| task | [Task](#task) | Yes | Task to be added to the queue.| 2130e41f4b71Sopenharmony_ci 2131e41f4b71Sopenharmony_ci**Return value** 2132e41f4b71Sopenharmony_ci 2133e41f4b71Sopenharmony_ci| Type | Description | 2134e41f4b71Sopenharmony_ci| ---------------- | --------------------------------- | 2135e41f4b71Sopenharmony_ci| Promise\<Object> | Promise used to return the task execution result.| 2136e41f4b71Sopenharmony_ci 2137e41f4b71Sopenharmony_ci**Error codes** 2138e41f4b71Sopenharmony_ci 2139e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Utils Error Codes](errorcode-utils.md). 2140e41f4b71Sopenharmony_ci 2141e41f4b71Sopenharmony_ci| ID| Error Message | 2142e41f4b71Sopenharmony_ci| -------- | ------------------------------------------- | 2143e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. | 2144e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. | 2145e41f4b71Sopenharmony_ci| 10200025 | dependent task not allowed. | 2146e41f4b71Sopenharmony_ci| 10200051 | The periodic task cannot be executed again. | 2147e41f4b71Sopenharmony_ci 2148e41f4b71Sopenharmony_ci**Example** 2149e41f4b71Sopenharmony_ci 2150e41f4b71Sopenharmony_ci```ts 2151e41f4b71Sopenharmony_ci@Concurrent 2152e41f4b71Sopenharmony_cifunction additionDelay(delay:number): void { 2153e41f4b71Sopenharmony_ci let start: number = new Date().getTime(); 2154e41f4b71Sopenharmony_ci while (new Date().getTime() - start < delay) { 2155e41f4b71Sopenharmony_ci continue; 2156e41f4b71Sopenharmony_ci } 2157e41f4b71Sopenharmony_ci} 2158e41f4b71Sopenharmony_ci@Concurrent 2159e41f4b71Sopenharmony_cifunction waitForRunner(finalString: string): string { 2160e41f4b71Sopenharmony_ci return finalString; 2161e41f4b71Sopenharmony_ci} 2162e41f4b71Sopenharmony_ciasync function seqRunner() 2163e41f4b71Sopenharmony_ci{ 2164e41f4b71Sopenharmony_ci let finalString:string = ""; 2165e41f4b71Sopenharmony_ci let task1:taskpool.Task = new taskpool.Task(additionDelay, 3000); 2166e41f4b71Sopenharmony_ci let task2:taskpool.Task = new taskpool.Task(additionDelay, 2000); 2167e41f4b71Sopenharmony_ci let task3:taskpool.Task = new taskpool.Task(additionDelay, 1000); 2168e41f4b71Sopenharmony_ci let task4:taskpool.Task = new taskpool.Task(waitForRunner, finalString); 2169e41f4b71Sopenharmony_ci 2170e41f4b71Sopenharmony_ci let runner:taskpool.SequenceRunner = new taskpool.SequenceRunner(); 2171e41f4b71Sopenharmony_ci runner.execute(task1).then(() => { 2172e41f4b71Sopenharmony_ci finalString += 'a'; 2173e41f4b71Sopenharmony_ci console.info("seqrunner: task1 done."); 2174e41f4b71Sopenharmony_ci }); 2175e41f4b71Sopenharmony_ci runner.execute(task2).then(() => { 2176e41f4b71Sopenharmony_ci finalString += 'b'; 2177e41f4b71Sopenharmony_ci console.info("seqrunner: task2 done"); 2178e41f4b71Sopenharmony_ci }); 2179e41f4b71Sopenharmony_ci runner.execute(task3).then(() => { 2180e41f4b71Sopenharmony_ci finalString += 'c'; 2181e41f4b71Sopenharmony_ci console.info("seqrunner: task3 done"); 2182e41f4b71Sopenharmony_ci }); 2183e41f4b71Sopenharmony_ci await runner.execute(task4); 2184e41f4b71Sopenharmony_ci console.info("seqrunner: task4 done, finalString is " + finalString); 2185e41f4b71Sopenharmony_ci} 2186e41f4b71Sopenharmony_ci``` 2187e41f4b71Sopenharmony_ci 2188e41f4b71Sopenharmony_ci## State<sup>10+</sup> 2189e41f4b71Sopenharmony_ci 2190e41f4b71Sopenharmony_ciEnumerates the task states. After a task is created and **execute()** is called, the task is placed in the internal queue of the task pool and the state is **WAITING**. When the task is being executed by the worker thread of the task pool, the state changes to **RUNNING**. After the task is executed and the result is returned, the state is reset to **WAITING**. When the task is proactively canceled, the state changes to **CANCELED**. 2191e41f4b71Sopenharmony_ci 2192e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 2193e41f4b71Sopenharmony_ci 2194e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 2195e41f4b71Sopenharmony_ci 2196e41f4b71Sopenharmony_ci| Name | Value | Description | 2197e41f4b71Sopenharmony_ci| --------- | -------- | ------------- | 2198e41f4b71Sopenharmony_ci| WAITING | 1 | The task is waiting.| 2199e41f4b71Sopenharmony_ci| RUNNING | 2 | The task is running.| 2200e41f4b71Sopenharmony_ci| CANCELED | 3 | The task is canceled.| 2201e41f4b71Sopenharmony_ci 2202e41f4b71Sopenharmony_ci 2203e41f4b71Sopenharmony_ci## TaskInfo<sup>10+</sup> 2204e41f4b71Sopenharmony_ci 2205e41f4b71Sopenharmony_ciDescribes the internal information about a task. 2206e41f4b71Sopenharmony_ci 2207e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 2208e41f4b71Sopenharmony_ci 2209e41f4b71Sopenharmony_ci### Attributes 2210e41f4b71Sopenharmony_ci 2211e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 2212e41f4b71Sopenharmony_ci 2213e41f4b71Sopenharmony_ci| Name | Type | Readable| Writable| Description | 2214e41f4b71Sopenharmony_ci| -------- | ------------------ | ---- | ---- | ------------------------------------------------------------- | 2215e41f4b71Sopenharmony_ci| name<sup>12+</sup> | string | Yes | No | Task name.<br> **Atomic service API**: This API can be used in atomic services since API version 12. | 2216e41f4b71Sopenharmony_ci| taskId | number | Yes | No | Task ID.<br> **Atomic service API**: This API can be used in atomic services since API version 11. | 2217e41f4b71Sopenharmony_ci| state | [State](#state10) | Yes | No | Task state.<br> **Atomic service API**: This API can be used in atomic services since API version 11. | 2218e41f4b71Sopenharmony_ci| duration | number | Yes | No | Duration that the task has been executed, in ms. If the return value is **0**, the task is not running. If the return value is empty, no task is running.<br> **Atomic service API**: This API can be used in atomic services since API version 11. | 2219e41f4b71Sopenharmony_ci 2220e41f4b71Sopenharmony_ci## ThreadInfo<sup>10+</sup> 2221e41f4b71Sopenharmony_ci 2222e41f4b71Sopenharmony_ciDescribes the internal information about a worker thread. 2223e41f4b71Sopenharmony_ci 2224e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 2225e41f4b71Sopenharmony_ci 2226e41f4b71Sopenharmony_ci### Attributes 2227e41f4b71Sopenharmony_ci 2228e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 2229e41f4b71Sopenharmony_ci 2230e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 2231e41f4b71Sopenharmony_ci 2232e41f4b71Sopenharmony_ci| Name | Type | Readable| Writable| Description | 2233e41f4b71Sopenharmony_ci| -------- | ---------------------- | ---- | ---- | -------------------------------------------------------- | 2234e41f4b71Sopenharmony_ci| tid | number | Yes | No | ID of the worker thread. If the return value is empty, no task is running. | 2235e41f4b71Sopenharmony_ci| taskIds | number[] | Yes | No | IDs of tasks running on the calling thread. If the return value is empty, no task is running. | 2236e41f4b71Sopenharmony_ci| priority | [Priority](#priority) | Yes | No | Priority of the calling thread. If the return value is empty, no task is running. | 2237e41f4b71Sopenharmony_ci 2238e41f4b71Sopenharmony_ci## TaskPoolInfo<sup>10+</sup> 2239e41f4b71Sopenharmony_ci 2240e41f4b71Sopenharmony_ciDescribes the internal information about a task pool. 2241e41f4b71Sopenharmony_ci 2242e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 2243e41f4b71Sopenharmony_ci 2244e41f4b71Sopenharmony_ci### Attributes 2245e41f4b71Sopenharmony_ci 2246e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Utils.Lang 2247e41f4b71Sopenharmony_ci 2248e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 11. 2249e41f4b71Sopenharmony_ci 2250e41f4b71Sopenharmony_ci| Name | Type | Readable| Writable| Description | 2251e41f4b71Sopenharmony_ci| ------------- | -------------------------------- | ---- | ---- | -------------------- | 2252e41f4b71Sopenharmony_ci| threadInfos | [ThreadInfo[]](#threadinfo10) | Yes | No | Internal information about the worker threads. | 2253e41f4b71Sopenharmony_ci| taskInfos | [TaskInfo[]](#taskinfo10) | Yes | No | Internal information about the tasks. | 2254e41f4b71Sopenharmony_ci 2255e41f4b71Sopenharmony_ci 2256e41f4b71Sopenharmony_ci## Additional Information 2257e41f4b71Sopenharmony_ci 2258e41f4b71Sopenharmony_ci### Sequenceable Data Types 2259e41f4b71Sopenharmony_ciThe following sequenceable data types are supported: All Primitive Type (excluding symbol), Date, String, RegExp, Array, Map, Set, Object, ArrayBuffer, and TypedArray. [Serialization Types Supported by TaskPool and Worker](../../arkts-utils/serialization-support-types.md) 2260e41f4b71Sopenharmony_ci 2261e41f4b71Sopenharmony_ci### Using the Task Pool in Simple Mode 2262e41f4b71Sopenharmony_ci 2263e41f4b71Sopenharmony_ci**Example 1** 2264e41f4b71Sopenharmony_ci 2265e41f4b71Sopenharmony_ci```ts 2266e41f4b71Sopenharmony_ci// Common functions are supported, and variables passed in by input parameters are also supported. 2267e41f4b71Sopenharmony_ci@Concurrent 2268e41f4b71Sopenharmony_cifunction printArgs(args: string): string { 2269e41f4b71Sopenharmony_ci console.info("func: " + args); 2270e41f4b71Sopenharmony_ci return args; 2271e41f4b71Sopenharmony_ci} 2272e41f4b71Sopenharmony_ciasync function taskpoolExecute(): Promise<void> { 2273e41f4b71Sopenharmony_ci // taskpool.execute(task) 2274e41f4b71Sopenharmony_ci let task: taskpool.Task = new taskpool.Task(printArgs, "create task, then execute"); 2275e41f4b71Sopenharmony_ci console.info("taskpool.execute(task) result: " + await taskpool.execute(task)); 2276e41f4b71Sopenharmony_ci // taskpool.execute(function) 2277e41f4b71Sopenharmony_ci console.info("taskpool.execute(function) result: " + await taskpool.execute(printArgs, "execute task by func")); 2278e41f4b71Sopenharmony_ci} 2279e41f4b71Sopenharmony_citaskpoolExecute(); 2280e41f4b71Sopenharmony_ci``` 2281e41f4b71Sopenharmony_ci 2282e41f4b71Sopenharmony_ci**Example 2** 2283e41f4b71Sopenharmony_ci 2284e41f4b71Sopenharmony_ci```ts 2285e41f4b71Sopenharmony_ci// b.ets 2286e41f4b71Sopenharmony_ciexport let c: string = "hello"; 2287e41f4b71Sopenharmony_ci``` 2288e41f4b71Sopenharmony_ci<!--code_no_check--> 2289e41f4b71Sopenharmony_ci```ts 2290e41f4b71Sopenharmony_ci// Reference an imported variable. 2291e41f4b71Sopenharmony_ci// a.ets (in the same directory as b.ets) 2292e41f4b71Sopenharmony_ciimport { c } from "./b"; 2293e41f4b71Sopenharmony_ci 2294e41f4b71Sopenharmony_ci@Concurrent 2295e41f4b71Sopenharmony_cifunction printArgs(a: string): string { 2296e41f4b71Sopenharmony_ci console.info(a); 2297e41f4b71Sopenharmony_ci console.info(c); 2298e41f4b71Sopenharmony_ci return a; 2299e41f4b71Sopenharmony_ci} 2300e41f4b71Sopenharmony_ci 2301e41f4b71Sopenharmony_ciasync function taskpoolExecute(): Promise<void> { 2302e41f4b71Sopenharmony_ci // taskpool.execute(task) 2303e41f4b71Sopenharmony_ci let task: taskpool.Task = new taskpool.Task(printArgs, "create task, then execute"); 2304e41f4b71Sopenharmony_ci console.info("taskpool.execute(task) result: " + await taskpool.execute(task)); 2305e41f4b71Sopenharmony_ci 2306e41f4b71Sopenharmony_ci // taskpool.execute(function) 2307e41f4b71Sopenharmony_ci console.info("taskpool.execute(function) result: " + await taskpool.execute(printArgs, "execute task by func")); 2308e41f4b71Sopenharmony_ci} 2309e41f4b71Sopenharmony_ci 2310e41f4b71Sopenharmony_citaskpoolExecute(); 2311e41f4b71Sopenharmony_ci``` 2312e41f4b71Sopenharmony_ci 2313e41f4b71Sopenharmony_ci**Example 3** 2314e41f4b71Sopenharmony_ci 2315e41f4b71Sopenharmony_ci```ts 2316e41f4b71Sopenharmony_ci// The async functions are supported. 2317e41f4b71Sopenharmony_ci@Concurrent 2318e41f4b71Sopenharmony_ciasync function delayExecute(): Promise<Object> { 2319e41f4b71Sopenharmony_ci let ret = await Promise.all<Object>([ 2320e41f4b71Sopenharmony_ci new Promise<Object>(resolve => setTimeout(resolve, 1000, "resolved")) 2321e41f4b71Sopenharmony_ci ]); 2322e41f4b71Sopenharmony_ci return ret; 2323e41f4b71Sopenharmony_ci} 2324e41f4b71Sopenharmony_ci 2325e41f4b71Sopenharmony_ciasync function taskpoolExecute(): Promise<void> { 2326e41f4b71Sopenharmony_ci taskpool.execute(delayExecute).then((result: Object) => { 2327e41f4b71Sopenharmony_ci console.info("taskPoolTest task result: " + result); 2328e41f4b71Sopenharmony_ci }).catch((err: string) => { 2329e41f4b71Sopenharmony_ci console.error("taskpool test occur error: " + err); 2330e41f4b71Sopenharmony_ci }); 2331e41f4b71Sopenharmony_ci} 2332e41f4b71Sopenharmony_ci 2333e41f4b71Sopenharmony_citaskpoolExecute(); 2334e41f4b71Sopenharmony_ci``` 2335e41f4b71Sopenharmony_ci 2336e41f4b71Sopenharmony_ci**Example 4** 2337e41f4b71Sopenharmony_ci 2338e41f4b71Sopenharmony_ci```ts 2339e41f4b71Sopenharmony_ci// c.ets 2340e41f4b71Sopenharmony_ciimport { taskpool } from '@kit.ArkTS'; 2341e41f4b71Sopenharmony_ci 2342e41f4b71Sopenharmony_ci@Concurrent 2343e41f4b71Sopenharmony_cifunction strSort(inPutArr: Array<string>): Array<string> { 2344e41f4b71Sopenharmony_ci let newArr = inPutArr.sort(); 2345e41f4b71Sopenharmony_ci return newArr; 2346e41f4b71Sopenharmony_ci} 2347e41f4b71Sopenharmony_ciexport async function func1(): Promise<void> { 2348e41f4b71Sopenharmony_ci console.info("taskpoolTest start"); 2349e41f4b71Sopenharmony_ci let strArray: Array<string> = ['c test string', 'b test string', 'a test string']; 2350e41f4b71Sopenharmony_ci let task: taskpool.Task = new taskpool.Task(strSort, strArray); 2351e41f4b71Sopenharmony_ci console.info("func1 result:" + await taskpool.execute(task)); 2352e41f4b71Sopenharmony_ci} 2353e41f4b71Sopenharmony_ci 2354e41f4b71Sopenharmony_ciexport async function func2(): Promise<void> { 2355e41f4b71Sopenharmony_ci console.info("taskpoolTest2 start"); 2356e41f4b71Sopenharmony_ci let strArray: Array<string> = ['c test string', 'b test string', 'a test string']; 2357e41f4b71Sopenharmony_ci taskpool.execute(strSort, strArray).then((result: Object) => { 2358e41f4b71Sopenharmony_ci console.info("func2 result: " + result); 2359e41f4b71Sopenharmony_ci }).catch((err: string) => { 2360e41f4b71Sopenharmony_ci console.error("taskpool test occur error: " + err); 2361e41f4b71Sopenharmony_ci }); 2362e41f4b71Sopenharmony_ci} 2363e41f4b71Sopenharmony_ci``` 2364e41f4b71Sopenharmony_ci<!--code_no_check--> 2365e41f4b71Sopenharmony_ci```ts 2366e41f4b71Sopenharmony_ci// index.ets 2367e41f4b71Sopenharmony_ciimport { func1, func2 } from "./c"; 2368e41f4b71Sopenharmony_ci 2369e41f4b71Sopenharmony_cifunc1(); 2370e41f4b71Sopenharmony_cifunc2(); 2371e41f4b71Sopenharmony_ci``` 2372e41f4b71Sopenharmony_ci 2373e41f4b71Sopenharmony_ci**Example 5** 2374e41f4b71Sopenharmony_ci 2375e41f4b71Sopenharmony_ci```ts 2376e41f4b71Sopenharmony_ci// Success in canceling a task 2377e41f4b71Sopenharmony_ci@Concurrent 2378e41f4b71Sopenharmony_cifunction inspectStatus(arg: number): number { 2379e41f4b71Sopenharmony_ci // Check whether the task has been canceled and respond accordingly. 2380e41f4b71Sopenharmony_ci if (taskpool.Task.isCanceled()) { 2381e41f4b71Sopenharmony_ci console.info("task has been canceled before 2s sleep."); 2382e41f4b71Sopenharmony_ci return arg + 2; 2383e41f4b71Sopenharmony_ci } 2384e41f4b71Sopenharmony_ci // 2s sleep 2385e41f4b71Sopenharmony_ci let t: number = Date.now(); 2386e41f4b71Sopenharmony_ci while (Date.now() - t < 2000) { 2387e41f4b71Sopenharmony_ci continue; 2388e41f4b71Sopenharmony_ci } 2389e41f4b71Sopenharmony_ci // Check again whether the task has been canceled and respond accordingly. 2390e41f4b71Sopenharmony_ci if (taskpool.Task.isCanceled()) { 2391e41f4b71Sopenharmony_ci console.info("task has been canceled after 2s sleep."); 2392e41f4b71Sopenharmony_ci return arg + 3; 2393e41f4b71Sopenharmony_ci } 2394e41f4b71Sopenharmony_ci return arg + 1; 2395e41f4b71Sopenharmony_ci} 2396e41f4b71Sopenharmony_ci 2397e41f4b71Sopenharmony_ciasync function taskpoolCancel(): Promise<void> { 2398e41f4b71Sopenharmony_ci let task: taskpool.Task = new taskpool.Task(inspectStatus, 100); // 100: test number 2399e41f4b71Sopenharmony_ci taskpool.execute(task).then((res: Object)=>{ 2400e41f4b71Sopenharmony_ci console.info("taskpool test result: " + res); 2401e41f4b71Sopenharmony_ci }).catch((err: string) => { 2402e41f4b71Sopenharmony_ci console.error("taskpool test occur error: " + err); 2403e41f4b71Sopenharmony_ci }); 2404e41f4b71Sopenharmony_ci // Cancel the task 1s later. 2405e41f4b71Sopenharmony_ci setTimeout(()=>{ 2406e41f4b71Sopenharmony_ci try { 2407e41f4b71Sopenharmony_ci taskpool.cancel(task); 2408e41f4b71Sopenharmony_ci } catch (e) { 2409e41f4b71Sopenharmony_ci console.error(`taskpool: cancel error code: ${e.code}, info: ${e.message}`); 2410e41f4b71Sopenharmony_ci } 2411e41f4b71Sopenharmony_ci }, 1000); 2412e41f4b71Sopenharmony_ci} 2413e41f4b71Sopenharmony_ci 2414e41f4b71Sopenharmony_citaskpoolCancel(); 2415e41f4b71Sopenharmony_ci``` 2416e41f4b71Sopenharmony_ci 2417e41f4b71Sopenharmony_ci**Example 6** 2418e41f4b71Sopenharmony_ci 2419e41f4b71Sopenharmony_ci```ts 2420e41f4b71Sopenharmony_ci// Failure to cancel a task that has been executed 2421e41f4b71Sopenharmony_ci@Concurrent 2422e41f4b71Sopenharmony_cifunction inspectStatus(arg: number): number { 2423e41f4b71Sopenharmony_ci // Check whether the task has been canceled and respond accordingly. 2424e41f4b71Sopenharmony_ci if (taskpool.Task.isCanceled()) { 2425e41f4b71Sopenharmony_ci return arg + 2; 2426e41f4b71Sopenharmony_ci } 2427e41f4b71Sopenharmony_ci // Wait for 2s. 2428e41f4b71Sopenharmony_ci let t: number = Date.now(); 2429e41f4b71Sopenharmony_ci while (Date.now() - t < 500) { 2430e41f4b71Sopenharmony_ci continue; 2431e41f4b71Sopenharmony_ci } 2432e41f4b71Sopenharmony_ci // Check again whether the task has been canceled and respond accordingly. 2433e41f4b71Sopenharmony_ci if (taskpool.Task.isCanceled()) { 2434e41f4b71Sopenharmony_ci return arg + 3; 2435e41f4b71Sopenharmony_ci } 2436e41f4b71Sopenharmony_ci return arg + 1; 2437e41f4b71Sopenharmony_ci} 2438e41f4b71Sopenharmony_ci 2439e41f4b71Sopenharmony_ciasync function taskpoolCancel(): Promise<void> { 2440e41f4b71Sopenharmony_ci let task: taskpool.Task = new taskpool.Task(inspectStatus, 100); // 100: test number 2441e41f4b71Sopenharmony_ci taskpool.execute(task).then((res: Object)=>{ 2442e41f4b71Sopenharmony_ci console.info("taskpool test result: " + res); 2443e41f4b71Sopenharmony_ci }).catch((err: string) => { 2444e41f4b71Sopenharmony_ci console.error("taskpool test occur error: " + err); 2445e41f4b71Sopenharmony_ci }); 2446e41f4b71Sopenharmony_ci 2447e41f4b71Sopenharmony_ci setTimeout(()=>{ 2448e41f4b71Sopenharmony_ci try { 2449e41f4b71Sopenharmony_ci taskpool.cancel(task); // The task has been executed and fails to be canceled. 2450e41f4b71Sopenharmony_ci } catch (e) { 2451e41f4b71Sopenharmony_ci console.error(`taskpool: cancel error code: ${e.code}, info: ${e.message}`); 2452e41f4b71Sopenharmony_ci } 2453e41f4b71Sopenharmony_ci }, 3000); // Wait for 3s to ensure that the task has been executed. 2454e41f4b71Sopenharmony_ci} 2455e41f4b71Sopenharmony_ci 2456e41f4b71Sopenharmony_citaskpoolCancel(); 2457e41f4b71Sopenharmony_ci``` 2458e41f4b71Sopenharmony_ci 2459e41f4b71Sopenharmony_ci**Example 7** 2460e41f4b71Sopenharmony_ci 2461e41f4b71Sopenharmony_ci```ts 2462e41f4b71Sopenharmony_ci// Success of canceling a task group to be executed 2463e41f4b71Sopenharmony_ci@Concurrent 2464e41f4b71Sopenharmony_cifunction printArgs(args: number): number { 2465e41f4b71Sopenharmony_ci let t: number = Date.now(); 2466e41f4b71Sopenharmony_ci while (Date.now() - t < 1000) { 2467e41f4b71Sopenharmony_ci continue; 2468e41f4b71Sopenharmony_ci } 2469e41f4b71Sopenharmony_ci console.info("printArgs: " + args); 2470e41f4b71Sopenharmony_ci return args; 2471e41f4b71Sopenharmony_ci} 2472e41f4b71Sopenharmony_ci 2473e41f4b71Sopenharmony_ciasync function taskpoolGroupCancelTest(): Promise<void> { 2474e41f4b71Sopenharmony_ci let taskGroup1: taskpool.TaskGroup = new taskpool.TaskGroup(); 2475e41f4b71Sopenharmony_ci taskGroup1.addTask(printArgs, 10); // 10: test number 2476e41f4b71Sopenharmony_ci taskGroup1.addTask(printArgs, 20); // 20: test number 2477e41f4b71Sopenharmony_ci taskGroup1.addTask(printArgs, 30); // 30: test number 2478e41f4b71Sopenharmony_ci let taskGroup2: taskpool.TaskGroup = new taskpool.TaskGroup(); 2479e41f4b71Sopenharmony_ci let task1: taskpool.Task = new taskpool.Task(printArgs, 100); // 100: test number 2480e41f4b71Sopenharmony_ci let task2: taskpool.Task = new taskpool.Task(printArgs, 200); // 200: test number 2481e41f4b71Sopenharmony_ci let task3: taskpool.Task = new taskpool.Task(printArgs, 300); // 300: test number 2482e41f4b71Sopenharmony_ci taskGroup2.addTask(task1); 2483e41f4b71Sopenharmony_ci taskGroup2.addTask(task2); 2484e41f4b71Sopenharmony_ci taskGroup2.addTask(task3); 2485e41f4b71Sopenharmony_ci taskpool.execute(taskGroup1).then((res: Array<Object>) => { 2486e41f4b71Sopenharmony_ci console.info("taskpool execute res is:" + res); 2487e41f4b71Sopenharmony_ci }).catch((e: string) => { 2488e41f4b71Sopenharmony_ci console.error("taskpool execute error is:" + e); 2489e41f4b71Sopenharmony_ci }); 2490e41f4b71Sopenharmony_ci taskpool.execute(taskGroup2).then((res: Array<Object>) => { 2491e41f4b71Sopenharmony_ci console.info("taskpool execute res is:" + res); 2492e41f4b71Sopenharmony_ci }).catch((e: string) => { 2493e41f4b71Sopenharmony_ci console.error("taskpool execute error is:" + e); 2494e41f4b71Sopenharmony_ci }); 2495e41f4b71Sopenharmony_ci 2496e41f4b71Sopenharmony_ci try { 2497e41f4b71Sopenharmony_ci taskpool.cancel(taskGroup2); 2498e41f4b71Sopenharmony_ci } catch (e) { 2499e41f4b71Sopenharmony_ci console.error(`taskpool: cancel error code: ${e.code}, info: ${e.message}`); 2500e41f4b71Sopenharmony_ci } 2501e41f4b71Sopenharmony_ci} 2502e41f4b71Sopenharmony_ci 2503e41f4b71Sopenharmony_citaskpoolGroupCancelTest() 2504e41f4b71Sopenharmony_ci``` 2505e41f4b71Sopenharmony_ci 2506e41f4b71Sopenharmony_ci**Example 8** 2507e41f4b71Sopenharmony_ci 2508e41f4b71Sopenharmony_ci```ts 2509e41f4b71Sopenharmony_ci// Create and execute 100 tasks with different priorities, and view their information. 2510e41f4b71Sopenharmony_ci@Concurrent 2511e41f4b71Sopenharmony_cifunction delay(): void { 2512e41f4b71Sopenharmony_ci let start: number = new Date().getTime(); 2513e41f4b71Sopenharmony_ci while (new Date().getTime() - start < 500) { 2514e41f4b71Sopenharmony_ci continue; 2515e41f4b71Sopenharmony_ci } 2516e41f4b71Sopenharmony_ci} 2517e41f4b71Sopenharmony_ci 2518e41f4b71Sopenharmony_cilet highCount: number = 0; 2519e41f4b71Sopenharmony_cilet mediumCount: number = 0; 2520e41f4b71Sopenharmony_cilet lowCount: number = 0; 2521e41f4b71Sopenharmony_cilet allCount: number = 100; 2522e41f4b71Sopenharmony_cifor (let i = 0; i < allCount; i++) { 2523e41f4b71Sopenharmony_ci let task1: taskpool.Task = new taskpool.Task(delay); 2524e41f4b71Sopenharmony_ci let task2: taskpool.Task = new taskpool.Task(delay); 2525e41f4b71Sopenharmony_ci let task3: taskpool.Task = new taskpool.Task(delay); 2526e41f4b71Sopenharmony_ci taskpool.execute(task1, taskpool.Priority.LOW).then(() => { 2527e41f4b71Sopenharmony_ci lowCount++; 2528e41f4b71Sopenharmony_ci }).catch((e: string) => { 2529e41f4b71Sopenharmony_ci console.error("low task error: " + e); 2530e41f4b71Sopenharmony_ci }) 2531e41f4b71Sopenharmony_ci taskpool.execute(task2, taskpool.Priority.MEDIUM).then(() => { 2532e41f4b71Sopenharmony_ci mediumCount++; 2533e41f4b71Sopenharmony_ci }).catch((e: string) => { 2534e41f4b71Sopenharmony_ci console.error("medium task error: " + e); 2535e41f4b71Sopenharmony_ci }) 2536e41f4b71Sopenharmony_ci taskpool.execute(task3, taskpool.Priority.HIGH).then(() => { 2537e41f4b71Sopenharmony_ci highCount++; 2538e41f4b71Sopenharmony_ci }).catch((e: string) => { 2539e41f4b71Sopenharmony_ci console.error("high task error: " + e); 2540e41f4b71Sopenharmony_ci }) 2541e41f4b71Sopenharmony_ci} 2542e41f4b71Sopenharmony_cilet start: number = new Date().getTime(); 2543e41f4b71Sopenharmony_ciwhile (new Date().getTime() - start < 1000) { 2544e41f4b71Sopenharmony_ci continue; 2545e41f4b71Sopenharmony_ci} 2546e41f4b71Sopenharmony_cilet taskpoolInfo: taskpool.TaskPoolInfo = taskpool.getTaskPoolInfo(); 2547e41f4b71Sopenharmony_cilet tid: number = 0; 2548e41f4b71Sopenharmony_cilet taskIds: Array<number> = []; 2549e41f4b71Sopenharmony_cilet priority: number = 0; 2550e41f4b71Sopenharmony_cilet taskId: number = 0; 2551e41f4b71Sopenharmony_cilet state: number = 0; 2552e41f4b71Sopenharmony_cilet duration: number = 0; 2553e41f4b71Sopenharmony_cilet name: string = ""; 2554e41f4b71Sopenharmony_cilet threadIS = Array.from(taskpoolInfo.threadInfos) 2555e41f4b71Sopenharmony_cifor(let threadInfo of threadIS) { 2556e41f4b71Sopenharmony_ci tid = threadInfo.tid; 2557e41f4b71Sopenharmony_ci if (threadInfo.taskIds != undefined && threadInfo.priority != undefined ) 2558e41f4b71Sopenharmony_ci { 2559e41f4b71Sopenharmony_ci taskIds.length = threadInfo.taskIds.length; 2560e41f4b71Sopenharmony_ci priority = threadInfo.priority; 2561e41f4b71Sopenharmony_ci } 2562e41f4b71Sopenharmony_ci console.info("taskpool---tid is:" + tid + ", taskIds is:" + taskIds + ", priority is:" + priority); 2563e41f4b71Sopenharmony_ci} 2564e41f4b71Sopenharmony_cilet taskIS = Array.from(taskpoolInfo.taskInfos) 2565e41f4b71Sopenharmony_cifor(let taskInfo of taskIS) { 2566e41f4b71Sopenharmony_ci taskId = taskInfo.taskId; 2567e41f4b71Sopenharmony_ci state = taskInfo.state; 2568e41f4b71Sopenharmony_ci if (taskInfo.duration != undefined ) 2569e41f4b71Sopenharmony_ci { 2570e41f4b71Sopenharmony_ci duration = taskInfo.duration; 2571e41f4b71Sopenharmony_ci name = taskInfo.name; 2572e41f4b71Sopenharmony_ci } 2573e41f4b71Sopenharmony_ci console.info("taskpool---taskId is:" + taskId + ", state is:" + state + ", duration is:" + duration + ", name is:" + name); 2574e41f4b71Sopenharmony_ci} 2575e41f4b71Sopenharmony_ci``` 2576