【问题标题】:Is it necessary to synchronize observables when observing on the main thread?在主线程上观察时是否需要同步可观察对象?
【发布时间】:2012-05-14 21:24:27
【问题描述】:

需要这个 .Synchronize() 吗?如果没有,什么时候真正需要使用?

_subject.SubscribeOn(Scheduler.TaskPool).ObserveOn(SynchronizationContext.Current).Synchronize().Subscribe(OnNext)

我认为这可能是必要的原因是因为我从多个线程调用主题的 OnNext。不过,我确实希望在主线程上执行 OnNext 方法。

【问题讨论】:

    标签: c# multithreading c#-4.0 system.reactive


    【解决方案1】:

    Synchronize 扩展方法用于两件事:

    1. 确保应用它的可观察对象遵循适当的可观察“合同” - 即OnNext*(OnError|OnCompleted)
    2. 确保每个 OnNext 都被序列化 - 如果在不同线程上调用,则不会重叠。

    但是,在您的情况下,您正在同步到当前上下文,因此会自动为您处理第二点。

    【讨论】:

    • 感谢您的帮助。在这种情况下,我还需要担心你的第一点吗?在什么情况下会有问题?
    • @user981225 - 如果您使用标准的 Rx 运算符,您通常无需担心第一点。只有当您实现自己的 IObservable<T> 时,您才会遇到行为不佳的 observables。
    猜你喜欢
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 2013-12-20
    • 2022-11-09
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多