场景描述
场景一:周期性任务处理,业务通过taskpool周期性处理业务。
场景二:延迟业务处理,业务一段时间后,通过taskpool处理业务。
场景三:串行业务处理,业务开展过程中,需要处理一系列的事务,事务处理过程中,存在先后次序。
场景四:业务的处理存在紧急优先次序,支持设置taskpool优先级处理。
场景五:ArkTS与Native协作开展业务,在ArkTS层触发业务,通过NAPI接口,传递到Native C++层,作业务管理等处理。
方案描述
场景一:周期性任务
方案:
1)定时器判断周期性事务执行。
2)Taskpool来处理任务执行。
核心代码:
@Concurrent
function ServiceHandle(pars: number): number {
hilog.info(0x0000, 'testTag', 'start ServiceHandle:%{public}d', pars);
// 业务处理过程,并将结果返回
let result = 0;
return result;
}
let count = 0;
function TimerOutHandle(pars:number)
{
count++;
let task: taskpool.Task = new taskpool.Task(ServiceHandle, pars);
hilog.info(0x0000, 'testTag', 'Timer handle count :%{public}d,pars %{public}d', count, pars);
taskpool.execute(task, taskpool.Priority.HIGH).then((res: object) => {
hilog.info(0x0000, 'testTag', 'ServiceHandle result :%{public}d', res);
if (g_callback != null) {
g_callback(count);
}
});
}
let timerId = -1;
export function TimerTest()
{
count = 0;
let value = 88;
timerId = setInterval(TimerOutHandle, 3000, value);
}
定时器每3秒超时一次,进入TimerOutHandle函数处理,TimerOutHandle函数体中,通过taskpool创建异步并发任务执行业务。
运行结果:
界面上,每超时一次,会呈现运行次数:
场景二:延迟任务
方案:
1)通过setTimeout来延迟处理。
- 通过executeDelayed来延迟处理。
核心代码:
1)setTimeout的处理如下:
@Concurrent
function ServiceHandle(pars: number): number {
hilog.info(0x0000, 'testTag', 'start ServiceHandle:%{public}d', pars);
// 业务处理过程,并将结果返回
let result = 0;
return result;
}
let count = 0;
function TimerOutHandle(pars:number)
{
count++;
let task: taskpool.Task = new taskpool.Task(ServiceHandle, pars);
hilog.info(0x0000, 'testTag', 'Timer handle count :%{public}d,pars %{public}d', count, pars);
taskpool.execute(task, taskpool.Priority.HIGH).then((res: object) => {
hilog.info(0x0000, 'testTag', 'ServiceHandle result :%{public}d', res);
if (g_callback != null) {
g_callback(count);
}
});
}
export function OneTimerCallTest()
{
count = 0;
if (g_callback != null) {
g_callback(count);
}
let value = 99;
hilog.info(0x0000, 'testTag', 'start setTimeout');
timerId = setTimeout(TimerOutHandle, 3000, value);
}
定时器3秒超时(仅