ObserveOn vs修改代码以在主线程上运行

时间:2013-12-25 04:22:34

标签: c# multithreading coding-style system.reactive reactiveui

我有一个viewmodel,它在与UI线程分开的线程上触发各种对象的可观察对象。同时,还有订阅这些observable的视图代码,需要更新UI线程上的控件。

使用ObserveOn来确保OnNxt处理程序在UI线程上运行(即将ObserveOn添加到可以在另一个线程上触发的任何位置),或者使用viewmodel代码负责在UI线程上调用/调度(即不需要ObserveOn,但有一次丑陋调用/调度lambda需要),或者是哪个选项和另一个一样好?

2 个答案:

答案 0 :(得分:4)

在这里查看我的答案:ObserveOn and SubscribeOn - where the work is being done

了解了这一点后,具体答案应该清楚,并且将取决于您的Rx查询的确切工作方式。

一般情况下,您希望最大限度地减少在UI线程上完成的工作,因此请在订阅后尽快离开UI线程(必要时使用SubscribeOn),然后尽快返回UI线程可以使用ObserveOn。您通常会将这些应用于链中的最后一个运算符。

答案 1 :(得分:3)

我认为最好使用ObserveOn或其他一些Rx调度机制来运行UI线程上的工作,因为那时你的解决方案仍然只是Rx代码并且仍然是可组合的。如果您使用Rx作为逻辑,但是然后使用其他一些非Rx调度机制来运行UI线程上的最后一位,那么当您切换机制时,您的代码可能会更加混乱,并且组合性较差。坚持ObserveOn可以使事情变得更简单。