我正在尝试使用 .net 的 Observable
类实现一个简单的观察者模式。我的代码看起来像这样:
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));
我希望观察者在后台线程上运行,但我希望它们都在同一个后台线程上运行(对于我们的实际实现,让每个监听器都在不同的线程上运行会太复杂)。
即,我希望所有的OnXXXChanged
逻辑都在UI线程之外的线程上执行,但是我不想在整个线程池上进行Observing
,我想确保它们按正确的顺序,在同一个线程上运行。
应该如何修改上述内容?
此外,有没有使用Observable
类来实现此模式的好的示例代码?
var scheduler = new EventLoopScheduler(ts => new Thread(ts) { IsBackground = true });
必须设置IsBackground=true
。如果没有设置,那么如果该线程仍然活动,它将防止进程退出。 - Contango