HarmonyOS ArkTs-taskpool切换主线程问题

想要封装一个方法,在工作线程调用可以切换回主线程去执行指定方法。目前使用taskpool去实现,想通过taskpool的onReceiveData和sendData来实现上述需求,在实现过程中报function不能序列化的问题。

目前问题:

1.上述思路是否可行,是api使用出了问题吗?

2.是否有其他推荐的方式去完成这个需求?

代码:

// Utils.ets
/**
 * 切换至主线程执行
 *
 * @param func 待执行方法
 * @param args 参数
 */
public static async runOnUiThread(func?: Function, ...args: Object[]) {
  // 这里构建了一个task,只用来sendData
  let uiTask = new taskpool.Task((...args: Object[]) => {
    taskpool.Task.sendData(...args);
  });
  // 设置回调函数func
  uiTask.onReceiveData(func);
  await taskpool.execute(uiTask);
}
// Demo.ets
// 这个方法我前面用taskpool调度,让它运行在工作线程了;
// 在这里调Utils.runOnUiThread,想测试方法是否可行
@Concurrent
function testRunOnUiThread() {
  console.info('testRunOnUiThread: current tid = ' + process.tid);
  // runOnUiTTT方法中只有一条console,输出内容拼接了一下'sss'
  Utils.runOnUiThread(runOnUiTTT, 'sss');
}

public static runOnUiTTT(info: string) {
  console.info('runOnUiTTT:  ' + info + '  ' + process.tid);
}
HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
shlp

new TaskPool.task的函数必须使用@Concurrent装饰器装饰,可参考文档的参数说明,添加装饰器:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-taskpool-V5#constructor

分享
微博
QQ
微信
回复
2天前
相关问题
HarmonyOS主线程线程切换问题
900浏览 • 1回复 待解决
TaskPool线程主线程如何通信
2527浏览 • 1回复 待解决
TaskPool如何跟主线程进行通信
730浏览 • 1回复 待解决
HarmonyOS 其他线程切换主线程的api
333浏览 • 1回复 待解决
HarmonyOS 线程切换问题
663浏览 • 1回复 待解决
HarmonyOS taskpool线程并发问题
152浏览 • 1回复 待解决
HarmonyOS taskpool线程池数量问题
178浏览 • 0回复 待解决
HarmonyOS Worker 与主线程通信问题
179浏览 • 1回复 待解决
HarmonyOS emitter 线程切换问题
608浏览 • 1回复 待解决
HarmonyOS TaskPool线程单例问题
350浏览 • 1回复 待解决
HarmonyOS taskpool.Task 线程安全问题
261浏览 • 1回复 待解决
HarmonyOS taskPool线程池task入参问题
334浏览 • 1回复 待解决
Worker的宿主线程必须是主线程吗?
684浏览 • 1回复 待解决
HarmonyOS 主线程刷新UI
460浏览 • 1回复 待解决
HarmonyOS ArkTS线程安全问题
622浏览 • 1回复 待解决