У нас есть класс Thing
, который реализует IObservable<Thing>
. В другом классе есть коллекция Thing
, и этот класс должен реагировать на обновления из всех этих наблюдаемых единым образом. Очевидный способ сделать это - Observable.Merge()
, и это вообще работает; однако, когда коллекция меняется, мы также должны подписаться на любые новые Thing
s в нашей объединенной подписке (и, теоретически, отказаться от подписки на все удаленные, но это кажется менее проблематичным - они больше не будут производить никаких обновлений) ,Слияние меняющейся коллекции наблюдаемых
В настоящее время мы достигаем этого путем воссоздания подписки на каждое изменение коллекции, но это кажется довольно субоптимальным с точки зрения затрат на обработку, а также из-за отсутствия обновлений от любого из Thing
в течение короткого времени между отбрасыванием старой подписки и создание нового (что доказало свою эффективность на практике, особенно, поскольку нам также необходимо дозвониться до подписки на короткий промежуток времени, а буферизованные элементы теряются при утилизацию подписки).
Каков надлежащий способ слияния изменяющейся коллекции наблюдаемых?
Каков тип коллекции, в которой хранятся заметки Thing Observables? – Shlomo
@ Шломо О, я должен был упомянуть об этом. Это «ObservableCollection» (точнее, Caliburn.Micro «BindableCollection»). – TeaDrivenDev
Я также предполагаю, что у вас нет класса класса: IObservable ', что было бы довольно странно. Опечатка? Может быть, вы имели в виду 'class Thing: IObservable '? –
Shlomo