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

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

HarmonyOS
2024-12-27 13:47:40
浏览
收藏 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
微信
回复
2024-12-27 16:39:29
相关问题
自定义类如何实现序列化
2437浏览 • 1回复 待解决
HarmonyOS Map 序列化问题
535浏览 • 1回复 待解决
HarmonyOS http请求,json序列化
650浏览 • 1回复 待解决
求大佬告知如何序列化对象
1411浏览 • 1回复 待解决
HarmonyOS JSON中的map结构如何序列化
1116浏览 • 1回复 待解决
有谁知道 task 参数无法序列化
1989浏览 • 1回复 待解决
JSON反序列化如何重命名字段?
753浏览 • 1回复 待解决
HarmonyOS 有没有类似protobuf的序列化
357浏览 • 1回复 待解决
如何使用taskpool实现多线程
1575浏览 • 1回复 待解决