#跟着坚果学鸿蒙#ArkTS 之taskpool<下>
·
- cancel:取消任务池中的任务。当任务在taskpool等待队列中,取消该任务后该任务将不再执行,并返回undefined作为结果;当任务已经在taskpool工作线程执行,取消该任务并不影响任务继续执行,执行结果在catch分支返回,搭配isCanceled使用可以对任务取消行为作出响应。taskpool.cancel对其之前的taskpool.execute/taskpool.executeDelayed生效。
@Concurrent
function inspectStatus(arg: number): number {
// 第一次检查任务是否已经取消并作出响应
if (taskpool.Task.isCanceled()) {
console.info("task has been canceled before 2s sleep.");
return arg + 2;
}
// 2s sleep
let t: number = Date.now();
while (Date.now() - t < 2000) {
continue;
}
// 第二次检查任务是否已经取消并作出响应
if (taskpool.Task.isCanceled()) {
console.info("task has been canceled after 2s sleep.");
return arg + 3;
}
return arg + 1;
}
function concurrentFunc() {
let task1: taskpool.Task = new taskpool.Task(inspectStatus, 100); // 100: test number
let task2: taskpool.Task = new taskpool.Task(inspectStatus, 200); // 200: test number
let task3: taskpool.Task = new taskpool.Task(inspectStatus, 300); // 300: test number
let task4: taskpool.Task = new taskpool.Task(inspectStatus, 400); // 400: test number
let task5: taskpool.Task = new taskpool.Task(inspectStatus, 500); // 500: test number
let task6: taskpool.Task = new taskpool.Task(inspectStatus, 600); // 600: test number
taskpool.execute(task1).then((res: Object) => {
console.info("taskpool test result: " + res);
});
taskpool.execute(task2);
taskpool.execute(task3);
taskpool.execute(task4);
taskpool.execute(task5);
taskpool.execute(task6);
// 1s后取消task
setTimeout(() => {
try {
taskpool.cancel(task1);
} catch (e) {
console.error(`taskpool: cancel error code: ${e.code}, info: ${e.message}`);
}
}, 1000);
}
concurrentFunc();
- terminateTask:中止任务池中的长时任务,在长时任务执行完成后调用。中止后,执行长时任务的线程可能会被回收。
@Concurrent
function longTask(arg: number): number {
let t: number = Date.now();
while (Date.now() - t < arg) {
continue;
}
console.info("longTask has been executed.");
return arg;
}
function concurrentFunc() {
let task1: taskpool.LongTask = new taskpool.LongTask(longTask, 1000); // 1000: sleep time
taskpool.execute(task1).then((res: Object) => {
taskpool.terminateTask(task1);
console.info("taskpool longTask result: " + res);
});
}
concurrentFunc();
- isConcurrent:检查函数是否为并发函数。
@Concurrent
function test() {}
let result: Boolean = taskpool.isConcurrent(test);
console.info("result is: " + result);
- getTaskPoolInfo:获取任务池内部信息,包含线程信息和任务信息。
let taskpoolInfo: taskpool.TaskPoolInfo = taskpool.getTaskPoolInfo();
更多推荐
所有评论(0)