J'essaye d'implémenter un modèle Observer simple en utilisant la classe .net Observable
. J'ai le code qui ressemble à ceci:.net Observable 'ObserverOn' un fil de fond
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));
Je veux que les observateurs à courir sur un fil d'arrière-plan, mais je les veux tous courir sur le même thread d'arrière-plan (pour notre mise en œuvre réelle, il sera trop compliqué à avoir chaque auditeur sur un fil différent). Je veux que toute la logique OnXXXChanged
soit exécutée sur un thread autre que le thread UI, mais au lieu de Observing
sur l'ensemble du pool de threads, je veux m'assurer qu'ils s'exécutent dans le bon ordre, sur le même thread.
Comment ce qui précède doit-il être modifié?
De même, sur une note quelque peu liée, y a-t-il de bons exemples de code utilisant la classe Observable
pour implémenter ce modèle?
Super, merci beaucoup! – user981225
EventLoopScheduler implémente IDisposable, vous serez donc responsable de sa mise au rebut. Vous pouvez utiliser la méthode Factory observable factory pour lier la durée de vie à l'abonnement. – Fredrick
Scheduler.NewThread est maintenant obsolète, vous devez utiliser NewThreadScheduler.Default à la place. – Kreshnik