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