我正在通过地理定位器构建可观察量,并且必须在 UI 线程上订阅事件。
ObserveOnDispatcher
被弃用了吗?
ObserveOnDispatcher()
没有被弃用,但正如 Paul 所说,通常最好提供一个显式调度程序,这样您就可以为单元测试注入TestScheduler
。
DispatcherScheduler.Current
可以用来获取当前DispatcherScheduler
- 而不是.Instance
,这是有道理的,因为实际上可以有多个 - 尽管大多数人不需要沿着那条特定的道路走下去!
ObserveOnDispatcher()
和DispatcherScheduler
存在于Windows Phone 8 Rx版本中。它们位于包含 xaml 平台特定元素的 nuget 包rx-xaml
中 - 如果您只包含 rx-main
,您将错过这一点。
具体来说,它们位于System.Reactive.Windows.Threading.dll
程序集中。 ObserveOnDispatcher()
在System.Reactive.Linq.DispatcherObservable
类型上,程序集也有System.Reactive.Concurrency.DispatcherScheduler
。
我通常写:
.ObserveOn(DispatcherScheduler.Instance)
如果我不使用反应式用户界面。如果我是,那就是
.ObserveOn(RxApp.MainThreadScheduler)
不同之处在于,在单元测试运行器中,RxApp.MainThreadScheduler
会自动纵为CurrentThread
,因此您的单元测试通过 - 否则它们将全部挂起。