RxSwift - 如果行为主体同时从不同线程接收到 2 个值怎么办?
我的两个主题在不同的线程上运行网络调用,一旦他们获取数据,就会更新另一个主题。我的问题是,如果它们同时向主题发送值会发生什么?
Two of my subjects running network calls on separate threads will update another subject once they fetch their data. My question is, what would happen if they both send a value to the subject at the exact same time?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
从Rx简介一书中:
IE,主题不是线程安全的。如果您从两个不同的线程对主题调用
on(_:)
,它们可能会导致同步异常并破坏可观察序列语法。换句话说,您面临着竞争条件的风险。最好的情况是,您在调试模式下只会收到警告。最坏的情况是,您的应用程序以某种神秘且无法识别的方式崩溃,远离问题实际发生的地方。
书中的另一句话:
From the book Intro to Rx:
IE, Subjects are not thread safe. If you call
on(_:)
on a Subject from two different threads, they can cause a synchronization anomaly and break the observable sequence grammar.In other words, you are risking a race condition. Best case, you just get a warning while in debug mode. Worst case, your app crashes in some mysterious unidentifiable way, far from where the problem actually occurred.
Another quote from the book: