Próbuję zaimplementować prosty wzorzec Obserwatora przy użyciu klasy .net Observable
. Mam kodu, który wygląda tak:.net Obserwowalny 'ObserveOn' wątek tła
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));
chcę obserwatorzy uruchomić w wątku tła, ale chcę im wszystkim działać na tym samym wątku tła (dla naszej prawdziwej realizacji, będzie to zbyt skomplikowane mieć każdego słuchacza w innym wątku).
tj Chcę wszystkim logiki OnXXXChanged
być przeprowadzone w wątku innego niż wątek UI, ale zamiast Observing
na całej puli wątków, chcę mieć pewność, że działają w prawidłowej kolejności, w tym samym wątku.
Jak należy zmienić powyższe?
Co więcej, w nieco zbliżonym notatniku, czy istnieją przykłady dobrych przykładów kodu z wykorzystaniem klasy Observable
do implementacji tego wzorca?
Świetnie, dziękuję bardzo! – user981225
EventLoopScheduler implementuje IDisposable, więc będziesz odpowiedzialny za ich usunięcie. Możesz użyć metody fabularnej Wykorzystaj obserwowalne, aby powiązać okres ważności z subskrypcją. – Fredrick
Program Scheduler.NewThread jest obecnie uznany za przestarzały, należy zamiast tego użyć polecenia NewThreadScheduler.Default. – Kreshnik