#跟着坚果学鸿蒙#ArkTS 之Task<上>
·
表示任务。使用constructor方法构造Task。任务可以多次执行或放入任务组执行或放入串行队列执行或添加依赖关系执行。
方法示例:
- constructor:Task的构造函数。
@Concurrent
function printArgs(args: number): number {
console.info("printArgs: " + args);
return args;
}
let task: taskpool.Task = new taskpool.Task(printArgs, "this is my first Task");
- isCanceled:检查当前正在运行的任务是否已取消。使用该方法前需要先构造Task。
@Concurrent
function inspectStatus(arg: number): number {
// do something
if (taskpool.Task.isCanceled()) {
console.info("task has been canceled.");
// do something
return arg + 1;
}
// do something
return arg;
}
- setTransferList:设置任务的传输列表。使用该方法前需要先构造Task。不调用该接口,则传给任务的数据中的ArrayBuffer默认transfer转移。
@Concurrent
function testTransfer(arg1: ArrayBuffer, arg2: ArrayBuffer): number {
console.info("testTransfer arg1 byteLength: " + arg1.byteLength);
console.info("testTransfer arg2 byteLength: " + arg2.byteLength);
return 100;
}
let buffer: ArrayBuffer = new ArrayBuffer(8);
let view: Uint8Array = new Uint8Array(buffer);
let buffer1: ArrayBuffer = new ArrayBuffer(16);
let view1: Uint8Array = new Uint8Array(buffer1);
console.info("testTransfer view byteLength: " + view.byteLength);
console.info("testTransfer view1 byteLength: " + view1.byteLength);
// 执行结果为:
// testTransfer view byteLength: 8
// testTransfer view1 byteLength: 16
let task: taskpool.Task = new taskpool.Task(testTransfer, view, view1);
task.setTransferList([view.buffer, view1.buffer]);
taskpool.execute(task).then((res: Object) => {
console.info("test result: " + res);
}).catch((e: string) => {
console.error("test catch: " + e);
})
console.info("testTransfer view2 byteLength: " + view.byteLength);
console.info("testTransfer view3 byteLength: " + view1.byteLength);
// 经过transfer转移之后值为0,执行结果为:
// testTransfer view2 byteLength: 0
// testTransfer view3 byteLength: 0
- setCloneList:设置任务的拷贝列表。使用该方法前需先构造Task。
// sendable.ets
// 定义两个Sendable class:BaseClass及其子类DeriveClass
@Sendable
export class BaseClass {
private str: string = "sendable: BaseClass";
static num :number = 10;
str1: string = "sendable: this is BaseClass's string";
num1: number = 5;
isDone1: boolean = false;
private fibonacciRecursive(n: number): number {
if (n <= 1) {
return n;
} else {
return this.fibonacciRecursive(n - 1) + this.fibonacciRecursive(n - 2);
}
}
private privateFunc(num: number): number{
let res: number = this.fibonacciRecursive(num);
console.info("sendable: BaseClass privateFunc res is: " + res);
return res;
}
publicFunc(num: number): number {
return this.privateFunc(num);
}
get GetNum(): number {
return this.num1;
}
set SetNum(num: number) {
this.num1 = num;
}
constructor() {
console.info(this.str);
this.isDone1 = true;
}
}
@Sendable
export class DeriveClass extends BaseClass {
name: string = "sendable: this is DeriveClass";
printName() {
console.info(this.name);
}
constructor() {
super();
}
}
更多推荐
所有评论(0)