HarmonyOS 多线程处理业务逻辑时,如何实现序列化

目前除了Worker和taskPool可以处理多线程,还有没有其他的api可以处理,现在有一个问题是一个对象使用了@Observer修饰,此时如果要操作这个对象添加线程处理,添加@Sendable会异常,而且操作一些其他对象也没法忽略,没有添加则会直接异常退出程序。

HarmonyOS
7天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Excelsior_abit

1、当前ArkTS只提供了TaskPool和Worker两种并发能力。

2、 应该指的是@Observed装饰器吧,@Observed以及@ObservedV2修饰的对象添加@Sendable会异常的原因是:一个对象,不能既是多线程共享对象,也是可观察对象。这就造成用户在线程中获取的数据,希望在界面上进行更新时,需要对线程数据进行深度拷贝到@Observed及@ObservedV2装饰的对象中去,导致大量的性能开销。

@Sendable与@Observed以及@ObservedV2不能同时装饰的根本原因在于:

a. @ObservedV2对象是通过setter,getter完成对属性的引用和变更监听,在运行时将属性转变为setter,getter了。真实属性值存储到了本对象的"_ob"+attrName的属性中了。而@Sendable对象是不可以对属性进行重新定义的;

b. 状态管理的驱动代码运行在主线程中。其他辅助线程中并不会加载状态管理的代码,因此其他线程修改数据,并不能得到改变通知。

分享
微博
QQ
微信
回复
7天前
相关问题
自定义类如何实现序列化
2160浏览 • 1回复 待解决
HarmonyOS Map 序列化问题
84浏览 • 1回复 待解决
HarmonyOS http请求,json序列化
155浏览 • 1回复 待解决
求大佬告知如何序列化对象
885浏览 • 1回复 待解决
HarmonyOS JSON中的map结构如何序列化
661浏览 • 1回复 待解决
JSON反序列化如何重命名字段?
323浏览 • 1回复 待解决
有谁知道 task 参数无法序列化
1830浏览 • 1回复 待解决