use*_*225 8 .net c# system.reactive observable
我试图使用.net Observable类实现一个简单的Observer模式.我的代码看起来像这样:
Observable.FromEventPattern<PropertyChangedEventArgs>(
Instance.User,
"PropertyChanged")
.Where(e => e.EventArgs.PropertyName == "FirstName")
.ObserveOn(Scheduler.ThreadPool)
.Subscribe(search => OnFirstNameChanged(search.EventArgs));
Observable.FromEventPattern<PropertyChangedEventArgs>(
Instance.User,
"PropertyChanged")
.Where(e => e.EventArgs.PropertyName == "LastName")
.ObserveOn(Scheduler.ThreadPool)
.Subscribe(search => OnLastNameChanged(search.EventArgs));
Run Code Online (Sandbox Code Playgroud)
我希望观察者在后台线程上运行,但是我希望它们都在相同的后台线程上运行(对于我们真正的实现,将每个侦听器放在不同的线程上会非常复杂).
即我希望所有的OnXXXChanged逻辑都在UI线程以外的线程上执行,但是Observing我想确保它们在同一个线程上以正确的顺序运行,而不是在整个线程池上运行.
如何修改上述内容?
另外,在某种程度上相关的说明,是否有任何好的示例代码示例使用Observable该类来实现此模式?
Mar*_*age 16
您应该创建一个EventLoopScheduler并在所有调用中使用该单个实例ObserverOn:
var scheduler = new EventLoopScheduler(ts => new Thread(ts));
... .ObserveOn(scheduler). ...
Run Code Online (Sandbox Code Playgroud)
工厂方法创建的线程是用于计划执行的线程.通过将属性ExitIfEmpty设置留给false该线程,即使没有任何事可做,也意味着它将被重用于每个调用.
但是,您也可以考虑使用Scheduler.NewThread.如果没有其他任何操作,使用该调度程序将允许线程终止.当更多工作排队时,ObserverOn将创建一个新线程,但只存在一个线程,这意味着您没有同步不同的观察者.
由EventLoopScheduler(由其使用Scheduler.NewThread)创建的线程被命名Event Loop #.您将在调试器中看到这些名称.
.ObserveOn(Scheduler.ThreadPool)采用线程调度程序,该调度程序指示观察运行的线程.对于单个线程,您希望使用EventLoopScheduler,而不是ThreadPool.
| 归档时间: |
|
| 查看次数: |
4217 次 |
| 最近记录: |